我使用NUnit集成测试。 我正在尝试测试以确保用户无法使用现有电子邮件创建帐户。 (test@example.com)
我需要在数据库中拥有测试数据(使用test@example.com电子邮件帐户)。
我可以在测试函数或sql脚本中创建此帐户(并在集成测试之前运行它)。
创建此测试数据的最佳位置在哪里?
答案 0 :(得分:5)
这两种选择都不对,但有很多方法可以扩展和巩固你的策略:
这些解决方案都不是互斥的。我会推荐最后一项(特别是可插拔提供程序),然后在对象模拟或虚拟但质量数据库测试数据之间进行选择。
答案 1 :(得分:2)
最好的办法是研究依赖注入和模拟框架。这样,您就可以使用模拟数据提供程序交换数据提供程序,并使用符合特定测试需求的数据。
如果您正在使用NHibernate或类似程序,则可以在每次测试(夹具)之前始终重新创建数据库模式。
答案 2 :(得分:1)
在您描述的情况下,我更愿意在测试功能中创建帐户。
单元测试应尽可能自包含。此外,如果您可以在一个地方看到测试所需的所有数据,那么能够理解您正在测试的内容是有帮助的。
这是一个完整的例子,应该说明:
[Test]
public void Test_CannotCreateDuplicateEmail()
{
// Arrange
CreateAccount("test@example.com"); // OK
// Act
try
{
CreateAccount("test@example.com");
// If control arrives here, then the test has failed.
Assert.Fail();
}
// Assert
catch(AccountException ex)
{
// Assert that the correct exception has been thrown.
Assert.AreEqual("Failed", ex.Message);
}
}