我有一个抽象的测试类
[TestFixture]
public abstract class BaseTests
{
private IRepository _repository;
public BaseTests(IRepository repository)
{
_repository = repository;
}
[Test]
public virtual void CanGetResultsFromSearch()
{
var results = _repository.GetResults("test");
Assert.IsTrue(results.Count() > 0);
}
}将基础测试作为单元测试和集成测试的一部分执行是否有任何价值。e.g
[TestFixture]
public class UnitTest : BaseTests
{
private static IRepository _repository = new FakeReposistory();
public UnitTest() : base(_repository)
{
}
}
[TestFixture]
public class IntegrationTest : BaseTests
{
private static IRepository _repository = new SqlReposistory();
public UnitTest() : base(_repository)
{
}
}重复两次测试有价值吗?我有点不清楚这个测试是不是与集成测试有关?也就是说,集成测试是否应该测试类上的公共方法?或者应该更多地测试系统的功能?还是两者都有?!
发布于 2009-10-14 12:03:22
在编写示例时,运行两个测试套件绝对是有意义的,因为它们将测试两个不同的东西。
在第一种情况下,它针对一个假数据库测试被测系统(SUT)。
在第二种情况下,它会针对实际数据库测试您的SUT。
至少,这些测试将验证SUT没有违反Liskov替换原则。
不过,还有其他优点:您的产品可能不会在生产环境中的假数据库上运行,因此集成测试可以更好地指示代码是否按预期工作。但是,运行集成测试可能会比运行单元测试套件慢得多,因此,即使单元测试套件不是一个现实的场景,它也会为您提供关于代码状态的更快速的反馈。
发布于 2009-10-14 08:54:29
我是一个邪恶的人,认为一个单位可以扩展到包括一个数据库,所以对此持保留态度,你对任何其他怪人都会持保留态度。
在大多数情况下,我认为没有必要使用完全模拟的数据库在数据层上重复测试,甚至运行单元测试(一个例外是错误条件)。
你介意我问一下FakeReposistory的GetResults是什么样子的吗?或者这是一种简化,它实际上是new SqlReposistory(mockedConnection)
https://stackoverflow.com/questions/1564453
复制相似问题