c# - 这两个单元测试断言有什么区别?

标签 c# unit-testing generics mstest assertions

遇到以下 MS 单元测试:

[TestMethod]
public void PersonRepository_AddressCountForSinglePerson_IsNotEqualToZero()
{
   // Arrange.
   Person person;

   // Act.
   person = personRepository.FindSingle(1);

   // Assert.
   Assert.AreNotEqual<int>(person.Addresses.Count, 0); 
}

我从来没有见过在做断言时使用泛型。

这就是我写断言的方式:

// Assert.
Assert.AreNotEqual(person.Addresses.Count, 0);

有什么区别?

当我将鼠标悬停在 AreNotEqual() 上时我正在使用的重载,该方法正在使用比较两个 double 的重载(不确定为什么没有 int,int 重载)。

如果我<int>的通用类型参数在 ReSharper 中,它说它是多余的。

所以我的问题是:如果我这样做的方式仍然是类型安全的,为什么要使用通用断言?

最佳答案

So my question is - if the way i do it is still type-safe, why use generic assertions?

您现在正在使用通用断言。编译器看到泛型方法,并在编译时选择它。这就是为什么 Resharper 说 <int>是多余的 - 这不是因为该方法是多余的,而是编译器可以隐式确定 Assert.AreNotEqual<int>方法是正确的使用方法。

一般来说,您通常不需要在泛型上指定类型。这就是 LINQ 语法可以忍受的原因 - 没有它,您需要在链中的每个方法调用上指定类型,匿名类型将无法使用。

也就是说,有时需要指定通用类型。这主要是编译器无法自动确定类型的情况,例如参数列表中没有匹配的参数(即:Foo.Create<MyClass>()),或者由于其他原因无法确定类型。

关于c# - 这两个单元测试断言有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3938673/

相关文章:

c# - 找到两个数组之间差异的更好方法

c# - 在保持图像 C# 的纵横比的同时打印边距

c# - 如何在进行重定向之前确保 Controller 和操作存在,asp.net mvc3

c# - RESTful WebService CORS 预检 channel 未成功

ruby-on-rails - Rails 'rake test' 在创建新的 Rails 项目后立即运行两次测试

unit-testing - Grails:单元测试中的NPE

ruby-on-rails - 在 factory_girl 中填充与 child 的关联

Scala 类型边界与 Foo[_]

objective-c - 什么是 _convertNSDictionaryToDictionary<A, B where ...> (NSDictionary?) -> [A : B] and why is it crashing my app?

swift - 具有元类型的泛型数组(使用 AlamofireObjectMapper)