C# 使具有内部修饰符的测试类对单元测试框架可见
我有一个单元测试类,如下所示:C# 使具有内部修饰符的测试类对单元测试框架可见,c#,unit-testing,C#,Unit Testing,我有一个单元测试类,如下所示: [TestClass] internal class AttractionRepositoryUnitTest : RepositoryBaseTest<AttractionRepository, Attraction, AttractionFakeRepository> { //Code here } [TestClass] 内部类AttractionRepositoryUnitTest: 存储基测试 { //代
[TestClass]
internal class AttractionRepositoryUnitTest :
RepositoryBaseTest<AttractionRepository, Attraction, AttractionFakeRepository>
{
//Code here
}
[TestClass]
内部类AttractionRepositoryUnitTest:
存储基测试
{
//代码在这里
}
由于internal
修饰符,这些类中的测试从未找到。为了使其可见,必须将RepositoryBaseTest
中的一个类公开,这是不可取的,为了避免这种情况,我需要花一些时间进行重构。是否可以使这个测试类对单元测试可见,而不修改它的可见性
Test类是一个内部类。我相信您需要的是 内部可归因于 将此属性添加到希望内部构件对用户可见的位置。在多个程序集需要时使用多个属性
如果无法添加该属性,则需要使用反射来访问有问题的属性。假设
RepositoryBaseTest
的所有类型参数都实现了一些接口,则可以提供这些接口的公共实现,这些接口封装了内部实现:
public AttractionRepositoryTestWrapper : IAttractionRepository
{
private AttractionRepository _attractionRepositoryImpl;
// forward all calls to _attractionRepositoryImpl
}
如果需要,其他内部构件也应如此
然后
RepositoryBaseTest
可以公开,因此AttractionRepositoryUnitTest
也可以公开。我不认为它是重复的,@ErikE-从源代码示例中,您可以看到测试类是内部的解决方案a:将单元测试类从内部更改为公共。老实说,为什么它不受欢迎?解决方案B:使用支持内部类的单元测试框架,例如NUnit@ricardo-阿尔维斯:你可能需要更改问题的标题,这有点误导….:-)@RuiJarimba刚刚做到了:P@RicardoAlves了解什么是T
,以及为什么它必须是内部的,这将是非常有趣的。单元测试项目内部必须考虑哪些可能的单元测试问题?您的测试与他们正在测试的代码位于不同的项目中,对吗?我应该使它对哪个程序集可见?我想我已经试过了所有的Microsoft程序集。@Jay从源代码示例中,您可以看到测试类是一个内部更新的答案,如果您不能将该属性添加到源代码中,您将不得不使用它reflection@Jay你确定这会有帮助吗??他的问题是单元测试框架找不到测试,因为测试类被标记为内部测试。请注意,他没有试图在不同的程序集中对内部类进行单元测试。是的,您将使单元测试程序集可以看到内部构件。。。你为什么认为这很重要我不知道,但这就是答案。您可能还需要主入口点程序集的第二个属性,因此添加两个属性。