Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使具有内部修饰符的测试类对单元测试框架可见_C#_Unit Testing - Fatal编程技术网

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你确定这会有帮助吗??他的问题是单元测试框架找不到测试,因为测试类被标记为内部测试。请注意,他没有试图在不同的程序集中对内部类进行单元测试。是的,您将使单元测试程序集可以看到内部构件。。。你为什么认为这很重要我不知道,但这就是答案。您可能还需要主入口点程序集的第二个属性,因此添加两个属性。