C# 如何对RuntimeType进行单元测试
但我有以下错误C# 如何对RuntimeType进行单元测试,c#,.net,unit-testing,C#,.net,Unit Testing,但我有以下错误 [Test] // arrange // ... // act var result = (Car) service.GetCar(req); // assert Assert.AreEqual(result, typeof(Car)); 但这次我还是犯了错误 Assert.AreEqual(result, Is.InstanceOf<Car>()); 预期: 但是: 下面的意思是您要比较对象和类型,同时要比较对象的类型:Assert.AreEqual(r
[Test]
// arrange
// ...
// act
var result = (Car) service.GetCar(req);
// assert
Assert.AreEqual(result, typeof(Car));
但这次我还是犯了错误
Assert.AreEqual(result, Is.InstanceOf<Car>());
预期:
但是:
下面的意思是您要比较对象和类型,同时要比较对象的类型:Assert.AreEqual(result,typeof(Car))代码>
您可以使用:Assert.AreEqual(result.GetType(),typeof(Car))代码>,但我不确定这是否有效
但最好的选择是尝试铸造,如果铸造不成功,则失败:
Expected: <Models.Car>
But was: <<instanceof Models.Car>>
或者您可以使用Assert.ThrowsException()
方法来检查是否抛出了异常,但它并不像前面的方法那样直接
try
{
var result = (Car) service.GetCar(req);
}
catch (Exception ex)
{
Assert.Fail();
}
Action Action=()=>{var result=(Car)service.GetCar(req);};
Assert.ThrowsException(操作);
下面的意思是您要比较对象和类型,同时要比较对象的类型:Assert.AreEqual(result,typeof(Car))代码>
您可以使用:Assert.AreEqual(result.GetType(),typeof(Car))代码>,但我不确定这是否有效
但最好的选择是尝试铸造,如果铸造不成功,则失败:
Expected: <Models.Car>
But was: <<instanceof Models.Car>>
或者您可以使用Assert.ThrowsException()
方法来检查是否抛出了异常,但它并不像前面的方法那样直接
try
{
var result = (Car) service.GetCar(req);
}
catch (Exception ex)
{
Assert.Fail();
}
Action Action=()=>{var result=(Car)service.GetCar(req);};
Assert.ThrowsException(操作);
您不需要强制转换service.GetCar(req)
的结果。这将有助于:
Action action = () => { var result = (Car) service.GetCar(req); };
Assert.ThrowsException<Exception>(action);
var result=service.GetCar(请求);
Assert.IsInstanceOf(结果);
或者,作为替代,使用:
var result = service.GetCar(req);
Assert.IsInstanceOf<Car>(result);
var result=service.GetCar(请求);
Assert.That(result,Is.TypeOf());
您不需要强制转换service.GetCar(req)
的结果。这将有助于:
Action action = () => { var result = (Car) service.GetCar(req); };
Assert.ThrowsException<Exception>(action);
var result=service.GetCar(请求);
Assert.IsInstanceOf(结果);
或者,作为替代,使用:
var result = service.GetCar(req);
Assert.IsInstanceOf<Car>(result);
var result=service.GetCar(请求);
Assert.That(result,Is.TypeOf());
你到底想证明什么?您已经知道,GetCar
返回特定类型的引用,因为.NET类型系统就是这样工作的。您知道它返回的对象是Car类型或其派生类型之一,否则代码将无法编译。如果要保证只返回Car
,而不返回其派生类型,可以将其标记为sealed
,这将防止到处派生。你到底想通过这个测试达到什么目的?你到底想证明什么?您已经知道,GetCar
返回特定类型的引用,因为.NET类型系统就是这样工作的。您知道它返回的对象是Car类型或其派生类型之一,否则代码将无法编译。如果要保证只返回Car
,而不返回其派生类型,可以将其标记为sealed
,这将防止到处派生。通过这次测试,你真正想要达到什么目的?