注意:我检查了提问题页面提出的搜索结果的前两页,但都没有解决我遇到的问题/问题。
更新:在晚安休息后重新启动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时,不会发生错误。
错误确实发生在两种情况下:
ActualProject
和TestProject
。 TestProject
已经引用了MSTest。将对NUnit的引用添加到TestProject
。ActualProject
,TestProject
仅引用MSTest,NUnitTestProject
仅引用NUnit。第二个让我特别感到困惑,因为它在TestProject
的代码上产生了一个错误,它根本没有引用NUnit。
仅供参考:ActualProject已将InternalsVisibleTo
设置为TestProject和NUnitTestProject
通过添加对NUnit测试框架的引用,为什么internal
变得不如protected
明显?
答案 0 :(得分:1)
当没有任何项目引用NUnit时,不会发生错误。
我认为这是不正确的。
此错误应始终发生。 (返回)类型应至少与方法(成员)一样可访问。
在辅助功能级别的部分排序中,internal
和protected
这两个级别不可相互比较。某人(同一项目中的非派生类型)无法看到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(我将在几周内删除该链接并重新编辑答案)