我无法构建测试项目,因为我得到:不一致的可访问性:属性类型'Lib.MyClass'的可访问性低于属性'Lib.Tests.GivenMyClass.Cut'。
装配工具
[assembly: InternalsVisibleTo(".Lib.Tests")]
internal class MyClass
{
public string Foo(int x) { ... }
}
装配Lib.Test
public GivenMyClass
{
protected internal SynchronizedDataLink Cut { get; private set; } // Inconsistent accessibility: property type 'Lib.MyClass' is less accessible than property 'Lib.Tests.GivenMyClass.Cut'
public GivenMyClass()
{
Cut = new MyClass();
}
}
[TestClass]
public WhenFooCalled
{
private int x;
public WhenFooCalled()
{
x = Create.Any<int>();
Cut.Foo(x);
}
[TestMethod]
public void ThenSomething()
{
// assert something using x
}
}
有哪些解决方案 - 我该如何使其有效?
我不想将'MyClass'视为公开,因为它是 专门用于一个组装。这是使用内部的用例 - 我是否正确?
真正的代码要复杂得多,并且要归功于以下内容 写单元测试模式它删除了很多测试代码 冗余并使重构更容易。但是我不说 我必须严格遵循这种写作模式......
我可以这样编写我的测试:
[TestClass]
public MyClassTests
{
private MyClass cut;
public MyClassTests()
{
cut = new MyClass();
}
public int ExecuteFoo()
{
int x = Create.Any<int>();
cut.Foo(x);
return x;
}
[Fact]
public void Foo_ThenSomething()
{
int x = ExecuteFoo();
// assert something using x
}
}
然而,我有很多像ExecuteFoo
一样的调用,一切都在一个类中。 Int inhertiance模式当我们在ClassUnderTest中更改方法时,我们只更改一个类中的测试(高内聚)。在一流的方法中,一切都在一个地方(很多不可读的代码)......