断言相等匿名类型
Asserting for equality anonymous types
我在声明两个匿名类型时遇到了问题。
到目前为止我做了什么
- 我有一个单元测试项目,它可以看到被测项目的内部结构,因此匿名类型对测试项目可见。
- 我在此处阅读了有关匿名类型的行为更像结构(值类型)而不是引用类型的信息:Why anonymous types Equals implementation compares fields?
再一次,在尝试再次测试相等性时出现断言异常:
1.
Assert.IsTrue(actionResult.Value.Equals(expectedActionResult.Value));
Expected: True But was: False
2.
Assert.AreEqual(actionResult.Value, expectedActionResult.Value);
Expected: <{ errorCode = -4, errorMessage = Invalid or Missing parameters within the request. }> (<>f__AnonymousType0'2[System.Int32,System.String])
But was: <{ errorCode = -4, errorMessage = Invalid or Missing parameters within the request. }> (<>f__AnonymousType0'2[System.Int32,System.String])
这是我创建真实和预期结果的地方:
var actionResult = _systemUnderTest.GetToken(null) as JsonResult;
var expectedActionResult =
new JsonResult(new
{
errorCode = (int)ErrorCodes.InvalidOrMissingParameters, errorMessage = ErrorCodes.InvalidOrMissingParameters.GetDescription()
});
我错过了什么?
尽管匿名类型在您的测试项目中是 可访问的,但这并不意味着它们将在您编写 new { ... }
.
如果您查看 actionResult.Value.GetType()
和 expectedActionResult.Value.GetType()
,我强烈怀疑您会发现它们是来自不同程序集的不同类型。
在这种情况下,最简单的解决方法可能只是比较结果 JSON。
我在声明两个匿名类型时遇到了问题。
到目前为止我做了什么
- 我有一个单元测试项目,它可以看到被测项目的内部结构,因此匿名类型对测试项目可见。
- 我在此处阅读了有关匿名类型的行为更像结构(值类型)而不是引用类型的信息:Why anonymous types Equals implementation compares fields?
再一次,在尝试再次测试相等性时出现断言异常:
1.
Assert.IsTrue(actionResult.Value.Equals(expectedActionResult.Value));
Expected: True But was: False
2.
Assert.AreEqual(actionResult.Value, expectedActionResult.Value);
Expected: <{ errorCode = -4, errorMessage = Invalid or Missing parameters within the request. }> (<>f__AnonymousType0'2[System.Int32,System.String]) But was: <{ errorCode = -4, errorMessage = Invalid or Missing parameters within the request. }> (<>f__AnonymousType0'2[System.Int32,System.String])
这是我创建真实和预期结果的地方:
var actionResult = _systemUnderTest.GetToken(null) as JsonResult;
var expectedActionResult =
new JsonResult(new
{
errorCode = (int)ErrorCodes.InvalidOrMissingParameters, errorMessage = ErrorCodes.InvalidOrMissingParameters.GetDescription()
});
我错过了什么?
尽管匿名类型在您的测试项目中是 可访问的,但这并不意味着它们将在您编写 new { ... }
.
如果您查看 actionResult.Value.GetType()
和 expectedActionResult.Value.GetType()
,我强烈怀疑您会发现它们是来自不同程序集的不同类型。
在这种情况下,最简单的解决方法可能只是比较结果 JSON。