使用测试类继承时测试内部类

时间:2014-03-20 12:55:49

标签: c# unit-testing mstest

我无法构建测试项目,因为我得到:不一致的可访问性:属性类型'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 
    }
}

有哪些解决方案 - 我该如何使其有效?

  1. 我不想将'MyClass'视为公开,因为它是 专门用于一个组装。这是使用内部的用例 - 我是否正确?

  2. 真正的代码要复杂得多,并且要归功于以下内容 写单元测试模式它删除了很多测试代码 冗余并使重构更容易。但是我不说 我必须严格遵循这种写作模式......

  3. 我可以这样编写我的测试:

    [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中更改方法时,我们只更改一个类中的测试(高内聚)。在一流的方法中,一切都在一个地方(很多不可读的代码)......

0 个答案:

没有答案