Supongamos que escribí un método de extensión en C # para bytematrices 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.ToHexinterior de mi proyecto, supongamos en el Foo.Domé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.Dodependerá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?