Dav*_*son 83 c# unit-testing assert
我在以下代码段中有两个相同的字节数组:
/// <summary>
///A test for Bytes
///</summary>
[TestMethod()]
public void BytesTest() {
byte[] bytes = Encoding.UTF8.GetBytes(Properties.Resources.ExpectedPacketData);
TransferEventArgs target = new TransferEventArgs(bytes);
byte[] expected = Encoding.UTF8.GetBytes(Properties.Resources.ExpectedPacketValue);
byte[] actual;
actual = target.Bytes;
Assert.AreEqual(expected, actual);
}
Run Code Online (Sandbox Code Playgroud)
两个数组都是相同的字节.在这种情况下,为什么Assert.AreEqual会失败?
tva*_*son 136
Assert.Equals
使用该Equals
方法的测试,默认情况下使用引用相等,并且由于它们是不同的对象,因此它们不相等.您需要比较数组中的每个字节并验证它们是否相等.一种方法是将它们转换为实现ICollection并使用CollectionAssert.AreEqual()的东西.
Jon*_*eet 42
因为数组不会覆盖Equals
.
您还没有说过您正在使用哪个测试框架,但基本上它将取决于特殊情况数组的框架.当然,您总是可以实现自己的帮助方法.我有时候这样做了.对于快速而肮脏的黑客攻击,如果您使用的是.NET 3.5,则可以使用Enumerable.SequenceEqual
扩展方法:
Assert.IsTrue(actual.SequenceEqual(expected));
Run Code Online (Sandbox Code Playgroud)
当然,自定义帮助程序方法可以为您提供有关它们如何不同的更多详细信息.您可能会发现这些方法MoreLINQ.TestExtensions
很有用,尽管它们相当粗糙并且也很准备好.
小智 5
//Initialize your arrays here
byte[] array1 = new byte[0];
byte[] array2 = new byte[0];
Assert.AreEqual(System.Convert.ToBase64String(array1),
System.Convert.ToBase64String(array2));
Run Code Online (Sandbox Code Playgroud)