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

时间:2017-10-23 08:55:27

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

在我的一个单元测试类中,我正在做几个测试方法响应的测试。它们是非常相似的测试,所以我创建了一个私有方法,以避免多次写出基本相同的测试(我很懒)。

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

示例方法

Simple example method

单元测试示例

enter image description here

正如你所看到的,单元测试所有调用MethodForTesting1,虽然只有第一个单元测试,即直接调用它的那个,被认为覆盖了该方法。

有没有办法解决这个问题,或者Visual Studio测试工具是否不喜欢单元测试中的私有方法?

修改 快速添加,我是单元测试的新手,所以对于奖励积分,在查看课程时是否有更好的方法来衡量代码覆盖率?

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

enter image description here

3 个答案:

答案 0 :(得分:4)

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

    [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"));
    }

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

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

对于代码覆盖率,您应该使用here所述的工具(适用于VS Enterprise版本)。此处article也提供了一些信息。

答案 1 :(得分:1)

你忘记了

[TestMethod]

注释高于上一个测试方法。

答案 2 :(得分:0)

您尚未将其标记为测试方法。尝试添加相应的属性:

[TestMethod]
public object MethodForTesting1()
{
  ...