Vamos supor que eu escrevi um método de extensão em C # para byte
matrizes que os codifica em cadeias hexadecimais, da seguinte maneira:
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();
}
}
Eu poderia testar o método acima usando o NUnit da seguinte maneira:
[Test]
public void TestToHex_Works()
{
var bytes = new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
Assert.AreEqual("0123456789abcdef", bytes.ToHex());
}
Se eu usar o Extensions.ToHex
interior do meu projeto, vamos assumir no Foo.Do
método da seguinte maneira:
public class Foo
{
public bool Do(byte[] payload)
{
var data = "ES=" + payload.ToHex() + "ff";
// ...
return data.Length > 5;
}
// ...
}
Então todos os testes de Foo.Do
dependerão do sucesso de TestToHex_Works
.
Usando funções livres em C ++, o resultado será o mesmo: testes que testam métodos que usam funções livres dependerão do sucesso de testes de funções livres.
Como posso lidar com essas situações? De alguma forma, posso resolver essas dependências de teste? Existe uma maneira melhor de testar os trechos de código acima?
toHex
(ou trocar implementações). Além disso, está tudo bem. Seu código convertido em hexadecimal foi testado, agora há outro código usando esse código testado como um utilitário para atingir seu próprio objetivo.
Then all tests of Foo.Do will depend on the success of TestToHex_works
-- Assim? Você não tem aulas que dependem do sucesso de outras aulas?