c# - 单元测试未显示为覆盖方法

标签 c# unit-testing visual-studio-2015

在我的一个单元测试类中,我正在进行多项测试来测试方法的响应。它们是非常相似的测试,因此我创建了一个私有(private)方法来避免多次编写基本相同的测试(我很懒)。

问题是,在 Visual Studio 中,方法本身上方的“传递”信息并未显示调用私有(private)方法的单元测试的覆盖范围。

示例方法

Simple example method

单元测试示例

enter image description here

如您所见,单元测试都调用 MethodForTesting1,尽管只有第一个单元测试(直接调用它的单元测试)覆盖了该方法。

有什么办法可以解决这个问题,或者 Visual Studio 测试工具只是不像单元测试中的私有(private)方法吗?

编辑 快速补充一下,我是单元测试的新手,因此为了加分,在查看类时是否有更好的方法来衡量代码覆盖率?

编辑2 为了解决那些指出我忘记了最后一个方法上面的 [TestMethod] 的快速答案,它仍然不显示代码覆盖率

enter image description here

最佳答案

理想情况下,您的单元测试应编写如下:

    [TestMethod]
    public void TestMethod21()
    {
        Class1 cls = new Class1();
        Assert.AreEqual("Jackie", cls.GetNewName("Jack"));
    }

    [TestMethod]
    public void TestMethod31()
    {
        Class1 cls = new Class1();
        Assert.AreEqual("Johnny", cls.GetNewName("John"));
    }

您不应该使用常见的私有(private)方法,例如包含来自不同测试方法的断言的Verify_MethodForTesting_EchosString(string testString) - 这不是最佳实践。您的测试用例不容易理解。

还应该为每个测试方法创建对象 - cft = new ClassForTesting(),当测试并行运行时,共享对象可能会产生问题。

对于代码覆盖率,您应该使用描述的工具 here (适用于 VS 企业版)。这里还有一些信息 article .

关于c# - 单元测试未显示为覆盖方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46885362/

相关文章:

unit-testing - AngularJS/Jasmine 测试中的模拟日期

c# - 具有不同缩进大小的文件的 Visual Studio 2015 缩进行为

c# - .NET 与 MySqlConnection 和连接池

c# - 如何在移动设备上的 Unity3d 中实现多点触控?

c# - 带前缀的区域中的 razor 页面 url

c++ - 没有定义的结构用作指针

c# - 如何在 visual studio 2015 中管理 EF 6 迁移?

c# - 快速图书与 C# Windows 应用程序集成

c# - 如何在 Visual Studio 2010 中并行化数据驱动的单元测试?

java - 当您同时具有虚拟和真实实现的接口(interface)时,单元测试的最佳方法是什么?