Nehmen wir an, ich habe in C # eine Erweiterungsmethode für byte
Arrays geschrieben, die sie wie folgt in Hex-Strings codiert:
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();
}
}
Ich könnte die obige Methode mit NUnit wie folgt testen :
[Test]
public void TestToHex_Works()
{
var bytes = new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
Assert.AreEqual("0123456789abcdef", bytes.ToHex());
}
Wenn ich das Extensions.ToHex
Innere meines Projekts verwende, nehmen wir in der Foo.Do
Methode Folgendes an:
public class Foo
{
public bool Do(byte[] payload)
{
var data = "ES=" + payload.ToHex() + "ff";
// ...
return data.Length > 5;
}
// ...
}
Dann Foo.Do
hängen alle Willensprüfungen vom Erfolg ab TestToHex_Works
.
Bei Verwendung freier Funktionen in C ++ ist das Ergebnis dasselbe: Tests, bei denen Testmethoden, die freie Funktionen verwenden, getestet werden, hängen vom Erfolg der Tests freier Funktionen ab.
Wie kann ich mit solchen Situationen umgehen? Kann ich diese Testabhängigkeiten irgendwie auflösen? Gibt es eine bessere Möglichkeit, die obigen Codefragmente zu testen?
toHex
(oder Swap-Implementierungen) verwenden können. Ansonsten ist alles in Ordnung. Ihr Code, der in Hex konvertiert wird, wird getestet. Jetzt gibt es einen anderen Code, der diesen getesteten Code als Dienstprogramm verwendet, um sein eigenes Ziel zu erreichen.
Then all tests of Foo.Do will depend on the success of TestToHex_works
-- Damit? Sie haben keine Klassen, die vom Erfolg anderer Klassen abhängen?