使带有内部修饰符的测试类对单元测试框架可见

时间:2018-07-16 17:05:05

标签: c# unit-testing

我有一个类似于以下的单元测试类:

[TestClass]
internal class AttractionRepositoryUnitTest : 
             RepositoryBaseTest<AttractionRepository, Attraction, AttractionFakeRepository>
{
    //Code here
}

由于使用internal修饰符,因此从未找到这些类中的测试。为了使其可见,RepositoryBaseTest中的一个类必须公开,这是不受欢迎的,为了避免这种情况,我需要进行重构,这需要一些时间。是否可以在不修改可见性的情况下使该测试类对单元测试可见?

Test类是它的内部类。

2 个答案:

答案 0 :(得分:2)

我相信您要寻找的是https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute(v=vs.110).aspx

InternalsVisibleToAttribite

将此属性添加到希望内部可见的位置。对于多个程序集,在必要时使用多个属性。

如果您无法添加该属性,则需要使用反射来访问有问题的属性。

答案 1 :(得分:0)

假设RepositoryBaseTest的所有类型参数都实现了某个接口,则只需提供这些接口的公共实现即可,这些内部实现封装了内部实现:

public AttractionRepositoryTestWrapper : IAttractionRepository
{
    private AttractionRepository _attractionRepositoryImpl;

    // forward all calls to _attractionRepositoryImpl
}

如果需要,其他内部组件也是如此。

然后可以RepositoryBaseTest公开,AttractionRepositoryUnitTest也可以公开。