使用NUnit进行不一致的可访问性错误,但仅使用MSTest编译好吗?

时间:2015-03-21 21:16:06

标签: c# compiler-errors nunit mstest

注意:我检查了提问题页面提出的搜索结果的前两页,但都没有解决我遇到的问题/问题。


更新:在晚安休息后重新启动VS后,不一致性就消失了......

使用之前没有产生错误的代码返回提交,甚至可以删除bin和obj文件夹,现在当然尽职尽责地生成错误,我只能通过更改来消除它代码 - 应该是。

这让我两个:D和:(

我不喜欢这种不一致的行为!


为什么使用MSTest编译好的代码会突然抛出

Error 1 Inconsistent accessibility: return type 
  'ActualProject.ClassHierarchy.BaseJointer' is less accessible than method
  'TestProject.ClassHierarchy.BaseJointer_Tests.MakeJointer()'

将NUnit添加到混音中?

“不太容易接近”的课程:

class BaseJointer
{
    public DoveTailJoint MakeDoveTailJoint(
        PieceOfWood woodTails, PieceOfWood woodPins) 
    { return null; }
}

比方法:

[TestClass]
public class BaseJointer_Tests
{
    protected virtual BaseJointer MakeJointer()
    {
        return new BaseJointer();
    }
}

当没有任何项目引用NUnit时,不会发生错误。

错误确实发生在两种情况下:

  1. 当解决方案中有两个项目时:ActualProjectTestProjectTestProject已经引用了MSTest。将对NUnit的引用添加到TestProject
  2. 时发生错误
  3. 如果解决方案中有三个项目:ActualProjectTestProject仅引用MSTest,NUnitTestProject仅引用NUnit。
  4. 第二个让我特别感到困惑,因为它在TestProject的代码上产生了一个错误,它根本没有引用NUnit。

    仅供参考:ActualProject已将InternalsVisibleTo设置为TestProject和NUnitTestProject

    通过添加对NUnit测试框架的引用,为什么internal变得不如protected明显?

3 个答案:

答案 0 :(得分:1)

  

当没有任何项目引用NUnit时,不会发生错误。

我认为这是不正确的。

此错误应始终发生。 (返回)类型应至少与方法(成员)一样可访问。

在辅助功能级别的部分排序中,internalprotected这两个级别不可相互比较。某人(同一项目中的非派生类型)无法看到internal成员,可以看到protected成员。并且protected成员可以被某人(在不同项目中导出类型)看到,他们看不到internal

所以internal不是“至少可以像protected那样访问”。因此,编译时错误是正确且必需的。

  

为什么internal变得不如protected那样明显   唯一的好处是添加对NUnit测试框架的引用?

不应该。在添加项目引用之前,您确定要强制编译所有项目吗?也许这个项目没有重新编译,直到你做了一些事情(无关)?

答案 1 :(得分:0)

尝试公开BaseJointer课程。

答案 2 :(得分:0)

我能够在不需要NUnit的情况下重现错误。两个项目,一个是BaseJointer,另一个是BaseJointer_Tests类。第二个项目引用了MSTest和第一个项目。第一个项目有assembly: InternalsVisibleTo("secondAssembly")(检查它是否正确,因为如果我删除它,我会收到第三个错误)。

现在,我说它是合乎逻辑的:如果您创建第三个程序集,并且子类BaseJointer_Tests,则可以访问BaseJointer而无需InternalsVisibleTo 。我已经构建了测试解决方案:https://drive.google.com/file/d/0B4UlHloflf49dDBCdzZLYm1DSkk/view?usp=sharing(我将在几周内删除该链接并重新编辑答案)