在我的一个单元测试类中,我正在做几个测试方法响应的测试。它们是非常相似的测试,所以我创建了一个私有方法,以避免多次写出基本相同的测试(我很懒)。
问题是,在Visual Studio中,方法本身上方的“传递”信息并未显示调用私有方法的单元测试的覆盖范围。
示例方法
单元测试示例
正如你所看到的,单元测试所有调用MethodForTesting1,虽然只有第一个单元测试,即直接调用它的那个,被认为覆盖了该方法。
有没有办法解决这个问题,或者Visual Studio测试工具是否不喜欢单元测试中的私有方法?
修改 快速添加,我是单元测试的新手,所以对于奖励积分,在查看课程时是否有更好的方法来衡量代码覆盖率?
编辑2
为了解决那些指出我忘记了最后一种方法之上[TestMethod]
的快速答案,它仍然没有显示代码覆盖率
答案 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()
{
...