首选哪种 MSTest Assert.AreEqual 方法?
Which MSTest Assert.AreEqual method is preferred?
编写单元测试断言的推荐方法是什么?通用和非通用版本都通过了,但我担心不必要的装箱、性能和准确性。我想为编码标准创建一个通用规则,这样我就可以建议以一种或另一种方式进行。
[TestMethod]
public void TestMethod1()
{
Visibility hidden = Visibility.Hidden;
Assert.AreEqual(Visibility.Hidden, hidden);
Assert.AreEqual<Visibility>(Visibility.Hidden, hidden);
}
这些是相同的方法调用,只是写法不同。 Visibility 类型参数是从参数的类型推断出来的。
当可以推断类型时,典型的风格是不包括它。
我会加 0.02 美元:
正如其他人所说,在这种情况下,两者是相同的,因为第一个调用(没有类型参数)由于类型推断仍然编译为相同的方法。考虑到这一点,最好使用不那么冗长的代码。
但是假设,由于某种原因,第一个调用实际上转到了需要 (object, object)
的非通用版本。事实证明,两者的行为完全相同。假设 (object, object)
的性能可能比通用形式稍差(反之亦然——在您测试之前谁知道呢?)。但是由于单元测试的性能很少是一个实际的考虑因素,所以这种担忧没有实际意义。除去性能和行为作为考虑因素,只剩下一个考虑因素——可读性。
第一个比第二个更具可读性(更少冗余,更简洁,不会对可读性产生负面影响)。因此,第一个应该优先于第二个,始终如此。
编写单元测试断言的推荐方法是什么?通用和非通用版本都通过了,但我担心不必要的装箱、性能和准确性。我想为编码标准创建一个通用规则,这样我就可以建议以一种或另一种方式进行。
[TestMethod]
public void TestMethod1()
{
Visibility hidden = Visibility.Hidden;
Assert.AreEqual(Visibility.Hidden, hidden);
Assert.AreEqual<Visibility>(Visibility.Hidden, hidden);
}
这些是相同的方法调用,只是写法不同。 Visibility 类型参数是从参数的类型推断出来的。
当可以推断类型时,典型的风格是不包括它。
我会加 0.02 美元:
正如其他人所说,在这种情况下,两者是相同的,因为第一个调用(没有类型参数)由于类型推断仍然编译为相同的方法。考虑到这一点,最好使用不那么冗长的代码。
但是假设,由于某种原因,第一个调用实际上转到了需要 (object, object)
的非通用版本。事实证明,两者的行为完全相同。假设 (object, object)
的性能可能比通用形式稍差(反之亦然——在您测试之前谁知道呢?)。但是由于单元测试的性能很少是一个实际的考虑因素,所以这种担忧没有实际意义。除去性能和行为作为考虑因素,只剩下一个考虑因素——可读性。
第一个比第二个更具可读性(更少冗余,更简洁,不会对可读性产生负面影响)。因此,第一个应该优先于第二个,始终如此。