我正在进行单元测试,我想声明返回的对象与模型相同。
var actual = scope.InstanceUnderTest.GetContent(expectedId);
var newFileStreamer = new FileStreamer(scope.TestDocument.Data, "application/octet-stream");
Assert.IsTrue(actual.Result.Equals(newFileStreamer));
actual.Result似乎距离与newFileStreamer相同的对象一级:
如何访问内部文件流对象以检查它们是否相同?
答案 0 :(得分:3)
它不是一个级别,调试器以这种方式显示它,因为它执行强制转换为正确的类型。如果右键单击第二个节点并选择add-watch,您将看到被监视的表达式包含一个强制转换。
要检查内部,您可以使用反射。 请注意不推荐来测试单元测试中的私有字段,但如果您真的想要,请参阅以下代码:
1 0.000000000 02:00:00:00:00:67 -> IPv4mcast_01:05:ee 0x8903 1467 Data Center Ethernet (DCE) protocol(Cisco)
2 0.000001180 10.81.130.23 -> 239.1.5.238 ST 1451 Messages: 14
3 0.006327070 02:00:00:00:00:67 -> IPv4mcast_01:05:ee 0x8903 1467 Data Center Ethernet (DCE) protocol(Cisco)
4 0.006328250 10.81.130.23 -> 239.1.5.238 ST 1451 Messages: 14
5 0.019039770 02:00:00:00:00:67 -> IPv4mcast_01:05:ee 0x8903 1467 Data Center Ethernet (DCE) protocol(Cisco)
答案 1 :(得分:1)
引用类型的.Equals()的默认行为是检查引用相等性(即它们是否指向堆上的同一对象)。由于您在断言之前实例化了两个对象中的一个,因此无法将它们视为同一个对象(因为其他对象无法在其实例化和断言之间获取对newFileStreamer的引用)。
如果你还没有provided an overload for .Equals的fileStreamer类型,那么你可以通过这样做来解决你的问题,并在方法中说明究竟什么是相同的。
答案 2 :(得分:0)
根据评论,这似乎应该没问题:
if( (FileStreamer)actual.Result == newFileStreamer) {
//do work here
}
或者我猜
if( (actual.Result as FileStreamer) == newFileStreamer) {
//do work here
}