加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何创建一个可以继承的NUnit的通用BaseTest,并从基础运行

发布时间:2020-12-15 06:46:24 所属栏目:百科 来源:网络整理
导读:所以基本上我有一个域对象和一个通用存储库,可以使用该对象执行CRUD操作. public interface IBaseRepositoryT where T : BaseEntity{ void Add(T entity); void Remove(T entity); T ById(int id); IEnumerableT All();} 所以我有这个接口的几个实现,每个域
所以基本上我有一个域对象和一个通用存储库,可以使用该对象执行CRUD操作.
public interface IBaseRepository<T> where T : BaseEntity
{
    void Add(T entity);
    void Remove(T entity);
    T ById(int id);
    IEnumerable<T> All();
}

所以我有这个接口的几个实现,每个域对象一个.

我想写一些集成测试(使用nunit),因为我想我会做一个BaseRepositoryTest – 像这样:

public abstract class BaseRepositoryTests<T> where T : BaseEntity
{
    public abstract IBaseRepository<T> GetRepository();
    public abstract T GetTestEntity();

    [Test]
    public void AddWhenCallingAddsObjectToDatabase()
    {
        IBaseRepository<T> repository = GetRepository();
        T entity = GetTestEntity();

        repository.Add(entity);
    }
}

现在,对于每个域对象,我将必须实现如何初始化Repository以及如何创建一个测试实体,这似乎是公平的,因为它们会不同…

所有我现在要做的是写正确的测试夹具?喜欢这个:

[TestFixture]
public class FooRepositoryTests: BaseRepositoryTests<Foo>
{
    public override IBaseRepository<Foo> GetRepository()
    {
        throw new NotImplementedException();
    }

    public override Foo GetTestEntity()
    {
        throw new NotImplementedException();
    }
}

这应该让我开始,给我一个失败的测试,因为投掷会打破它(我也尝试实际执行的方法,没有运气).但是测试人员(尝试两个图形用户界面和调试器测试运行器)只是忽略我的基础测试!它显示和全部 – 但报告回忽略.

所以我做了一点挖掘… NUnit在TextFixtureAttribute上有这个属性,让你指定你正在测试什么样的,所以我尝试放置属性

[TestFixture(typeof(Foo))]

首先是Base和Foo版本.当放在Foo版本上,它仍然只是忽略了基础的测试,当我把它放在基础上的时候,它会变红,因为方法抛出异常,这是很好的,除了即使我做实际的实现在FooTests中,它们仍然不起作用(显然,给出TestFixture属性的Base测试根本不知道什么类从中继承,所以找到实现是怎么知道的).

那么我坚持做什么呢?我可以在基本测试类中进行测试,然后在FooBaseRepositoryTests中覆盖它,只能从基础调用实现,这是一个跛脚解决方案,我认为…

还有什么要做的?我错过了什么吗?请帮忙,有人…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读