xTR*_*ANx 7 c# integration-testing nunit automated-tests
这是我为一个与数据库交互的类编写的集成测试:
[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);
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我无法在Save不涉及函数的情况下测试该函数,SearchSubscriberByUsername以确定用户是否已成功保存.我意识到集成测试并不是单元测试,它应该一次测试一个代码单元.但理想情况下,如果我可以在每个测试中测试我的存储库类中的一个函数,那将会很好,但我不知道如何实现这一点.
我到目前为止编写代码还是有更好的方法可以吗?
您的测试有问题.当您测试将数据保存到数据库中时,您应该测试它是否在数据库中,而不是存储库说它在数据库中.
如果您正在测试存储库的功能,那么您无法通过询问它是否已正确完成来验证该功能.这相当于对某人说'你做得对吗?' 他们会说是的.
想象一下,存储库永远不会提交.您的测试将正常通过,但数据将不在数据库中.
那么,我要做的是打开一个连接(纯SQL)到数据库,并检查数据是否已正确保存.您只需要在之前和之后选择计数(*)以确保用户已被保存.如果这样做,您也可以避免使用SearchSubscribersByUsername.
如果您正在测试存储库的功能,则根据定义,您无法信任存储库.