作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是我为与数据库交互的类编写的集成测试:
[Test]
public void SaveUser()
{
// Arrange
var user = new User();
// Set a bunch of properties of the above User object
// Act
var usersCountPreSave = repository.SearchSubscribersByUsername(user.Username).Count();
repository.Save(user);
var usersCountPostSave = repository.SearchSubscribersByUsername(user.Username).Count();
// Assert
Assert.AreEqual(userCountPreSave + 1, userCountPostSave);
}
在我看来,如果不涉及 SearchSubscriberByUsername
函数,我就无法测试 Save
函数以确定用户是否已成功保存。我意识到集成测试并不意味着应该一次测试一个代码单元的单元测试。但理想情况下,如果每次测试都可以在我的存储库类中测试一个函数,那就太好了,但我不知道如何实现这一点。
到目前为止,我编写的代码是否还不错,还是有更好的方法?
最佳答案
您的测试有问题。当您测试数据是否保存到数据库中时,您应该测试它是否在数据库中,而不是存储库说它在数据库中。
如果您正在测试存储库的功能,那么您无法通过询问它是否正确完成来验证该功能。这相当于对某人说“你做对了吗?”他们会说是的。
假设存储库永远不会提交。您的测试会顺利通过,但数据不会在数据库中。
因此,我要做的是打开一个到数据库的连接(纯 SQL)并检查数据是否已正确保存。只需要前后各一个select count(*)就可以保证用户已经被保存了。如果这样做,您也可以避免使用 SearchSubscribersByUsername。
如果您正在测试存储库的功能,根据定义,您不能信任存储库。
关于c# - 集成测试 : Am I doing it right?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6422393/
我是一名优秀的程序员,十分优秀!