【问题标题】:How to unit test constructor when using nested test classes使用嵌套测试类时如何对构造函数进行单元测试
【发布时间】:2015-12-09 09:52:28
【问题描述】:

假设我希望在类构造函数中进行一些逻辑单元测试,如果我使用 xUnit.net 并为每个方法嵌套测试类,我将如何构造它?

using Xunit;

public class MyClass
{
    public MyClass()
    {
        // Some logic to test
    }

    public int GetResult()
    {
        return 123;
    }
}

public class MyClassFacts
{
    // How to test MyClass constructor?

    // Nested classes to test each of MyClass' methods
    public class GetResult
    {
        [Fact]
        public void IsCorrect()
        {
            var myClass = new MyClass();
            int result = myClass.GetResult();
            Assert.Equal(123, result);
        }

        // Other tests for MyClass.GetResult()...
    }
}

【问题讨论】:

  • 所以你需要一个失败的测试
  • @quamrana 我不确定你的意思?

标签: c# unit-testing xunit.net


【解决方案1】:

从技术上讲,您已经在 IsCorrect() 测试中对其进行了测试,但如果您想要明确的测试:

using Xunit;

public class MyClass
{
    public MyClass()
    {
        // Some logic to test
    }

    public int GetResult()
    {
        return 123;
    }
}

public class MyClassFacts
{
    [Fact]
    public void Ctor()
    {
        var myClass = new MyClass();
        Assert.NotNull(myClass);
        // Any other asserts you require
    }

    // Nested classes to test each of MyClass' methods
    public class GetResult
    {
        [Fact]
        public void IsCorrect()
        {
            var myClass = new MyClass();
            int result = myClass.GetResult();
            Assert.Equal(123, result);
        }

        // Other tests for MyClass.GetResult()...
    }
}

【讨论】:

  • 是否应该像其他方法一样将构造函数测试放在嵌套类中(参见MyClass.GetResult)?例如:public class Ctor {[Fact] public void CtorTest(){}}
  • 这完全取决于你,但根据你目前的结构,我会说是的。这将使其保持一致。如果您正在寻找一种构建测试的好方法,请阅读 haacked.com/archive/2012/01/02/structuring-unit-tests.aspx,其中有一些很好的建议,一些 cmets 也是如此。
  • 谢谢,正是这篇文章让我对以这种方式构建测试感兴趣:D
  • 您也可以阅读这篇文章以获得不同的观点 - ayende.com/blog/152897/structuring-your-unit-tests-why
  • 我没想到 Ayende 会写一篇文章!有趣的是,cmets 中的大多数人似乎不同意并实际上遵循了 Phil Haack 的建议......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
相关资源
最近更新 更多