首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用抽象测试类来运行单元和集成测试有什么价值吗?

使用抽象测试类来运行单元和集成测试有什么价值吗?
EN

Stack Overflow用户
提问于 2009-10-14 05:45:39
回答 2查看 192关注 0票数 2

我有一个抽象的测试类

代码语言:javascript
复制
[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

代码语言:javascript
复制
[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)
    {
    } 
}

重复两次测试有价值吗?我有点不清楚这个测试是不是与集成测试有关?也就是说,集成测试是否应该测试类上的公共方法?或者应该更多地测试系统的功能?还是两者都有?!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-14 12:03:22

在编写示例时,运行两个测试套件绝对是有意义的,因为它们将测试两个不同的东西。

在第一种情况下,它针对一个假数据库测试被测系统(SUT)。

在第二种情况下,它会针对实际数据库测试您的SUT。

至少,这些测试将验证SUT没有违反Liskov替换原则。

不过,还有其他优点:您的产品可能不会在生产环境中的假数据库上运行,因此集成测试可以更好地指示代码是否按预期工作。但是,运行集成测试可能会比运行单元测试套件慢得多,因此,即使单元测试套件不是一个现实的场景,它也会为您提供关于代码状态的更快速的反馈。

票数 1
EN

Stack Overflow用户

发布于 2009-10-14 08:54:29

我是一个邪恶的人,认为一个单位可以扩展到包括一个数据库,所以对此持保留态度,你对任何其他怪人都会持保留态度。

在大多数情况下,我认为没有必要使用完全模拟的数据库在数据层上重复测试,甚至运行单元测试(一个例外是错误条件)。

你介意我问一下FakeReposistoryGetResults是什么样子的吗?或者这是一种简化,它实际上是new SqlReposistory(mockedConnection)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1564453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档