Tenho duas matrizes de bytes idênticas no seguinte segmento de código:
/// <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);
}
Ambas as matrizes são idênticas até o byte. Nesse cenário, por que Assert.AreEqual falharia?
c#
unit-testing
assert
David Anderson
fonte
fonte
Assert.AreEqual
, funcionarão bem.Respostas:
Assert.Equals
testa usando oEquals
método, que por padrão usa igualdade de referência e, por serem objetos diferentes, não são iguais. Você vai querer comparar cada byte na matriz e verificar se eles são iguais. Uma maneira de fazer isso é convertê-los em algo que implemente ICollection e usar CollectionAssert.AreEqual () .fonte
ICollection
, é claro. É até umIList
. É importante que sua "igualdade de coleção" considere a ordenação (isto é, as coleções devem ser iguais como sequências, não apenas como conjuntos matemáticos).Porque os arrays não substituem
Equals
.Você não disse qual framework de teste está usando, mas basicamente caberia a esse framework os arrays de casos especiais. Você sempre pode implementar seu próprio método auxiliar para fazer isso, é claro. Eu tenho feito isso algumas vezes. Para um hack rápido e sujo, se você estiver usando .NET 3.5, poderá usar o
Enumerable.SequenceEqual
método de extensão:Um método auxiliar personalizado pode fornecer mais detalhes sobre como eles diferem, é claro. Você pode achar os métodos
MoreLINQ.TestExtensions
úteis, embora eles também sejam bastante rudimentares e prontos.fonte
fonte
O método Assert.AreEqual subjacente acabará assumindo o padrão Object.Equals () para valores não nulos. A implementação padrão de Object.Equals () é a igualdade referencial. As 2 matrizes são idênticas em termos de valor, mas diferem em termos de referência e, portanto, não serão consideradas iguais.
fonte
vai comparar as coisas ... Funciona para mim ..
fonte
Método auxiliar simples criado:
fonte