Supongamos que escribí un método de extensión en C # para byte
matrices que los codifica en cadenas hexadecimales, de la siguiente manera:
public static class Extensions
{
public static string ToHex(this byte[] binary)
{
const string chars = "0123456789abcdef";
var resultBuilder = new StringBuilder();
foreach(var b in binary)
{
resultBuilder.Append(chars[(b >> 4) & 0xf]).Append(chars[b & 0xf]);
}
return resultBuilder.ToString();
}
}
Podría probar el método anterior usando NUnit de la siguiente manera:
[Test]
public void TestToHex_Works()
{
var bytes = new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
Assert.AreEqual("0123456789abcdef", bytes.ToHex());
}
Si uso el Extensions.ToHex
interior de mi proyecto, supongamos en el Foo.Do
método de la siguiente manera:
public class Foo
{
public bool Do(byte[] payload)
{
var data = "ES=" + payload.ToHex() + "ff";
// ...
return data.Length > 5;
}
// ...
}
Entonces, todas las pruebas Foo.Do
dependerán del éxito de TestToHex_Works
.
Usando funciones libres en C ++, el resultado será el mismo: las pruebas que prueban métodos que usan funciones libres dependerán del éxito de las pruebas de función libre.
¿Cómo puedo manejar tales situaciones? ¿Puedo resolver de alguna manera estas dependencias de prueba? ¿Hay una mejor manera de probar los fragmentos de código anteriores?
toHex
(o intercambiar implementaciones). Aparte de eso, todo está bien. Su código de conversión a hexadecimal se prueba, ahora hay otro código que usa ese código probado como una utilidad para lograr su propio objetivo.
Then all tests of Foo.Do will depend on the success of TestToHex_works
-- ¿Entonces? ¿No tienes clases que dependen del éxito de otras clases?