我想更好地使用NUnit来测试我编写的应用程序,但我经常发现,我编写的单元测试可以直接链接到环境或底层数据库开发机器。NUnit测试应用程序,而不是环境或数据库
让我举个例子。
我正在写一个类,它有一个单一的责任来回顾一个字符串,该字符串已被另一个应用程序存储在注册表中。密钥存储在HKCU \ Software \ CustomApplication \ IniPath中。
测试我最终写作看起来像这样;
[Test]
public void GetIniDir()
{
RegistryReader r = new RegistryReader();
Assert.AreEqual(@"C:\Programfiles\CustomApplication\SomeDir", r.IniDir);
}
但这里的问题是,字符串@ “C:\ PROGRAMFILES \ CustomApplication \ SomeDir” 实际上只是正确的现在。明天它可能会变成@“C:\ Anotherdir \ SomeDir”,并突然间断了我的单元测试,即使代码没有改变。
当我创建一个对数据库执行CRUD操作的类时,也会出现此问题。数据库中的数据可能会一直改变,这又会导致测试失败。所以即使我的班级做了它打算做的事情,它也会失败,因为数据库会返回我最初编写测试时所拥有的更多客户。
[Test]
public void GetAllCustomersCount()
{
DAL d = new DAL();
Assert.AreEqual(249, d.GetCustomerCount());
}
你们有没有写测试的提示,它不依赖于周围的环境呢?
但是,你不是真的单元测试,你是集成测试。 – 2009-02-28 16:10:59