次のように、配列用の拡張メソッドをC#でbyte
16進文字列にエンコードする拡張メソッドを記述したとします。
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();
}
}
次のように、NUnitを使用して上記のメソッドをテストできます。
[Test]
public void TestToHex_Works()
{
var bytes = new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
Assert.AreEqual("0123456789abcdef", bytes.ToHex());
}
Extensions.ToHex
プロジェクト内を使用する場合はFoo.Do
、次のようにメソッドを想定します。
public class Foo
{
public bool Do(byte[] payload)
{
var data = "ES=" + payload.ToHex() + "ff";
// ...
return data.Length > 5;
}
// ...
}
次に、のすべてのテストはFoo.Do
の成功に依存しTestToHex_Works
ます。
C ++でフリー関数を使用しても結果は同じです。フリー関数を使用するメソッドをテストするテストは、フリー関数テストの成功に依存します。
どうすればこのような状況に対処できますか?これらのテストの依存関係をどうにかして解決できますか?上記のコードスニペットをテストするより良い方法はありますか?
toHex
(またはスワップ実装)を簡単に使用できないことです。それを除いて、すべてがうまくいきます。16進数に変換するコードがテストされました。テストされたコードをユーティリティとして使用して、独自の目標を達成する別のコードがあります。
Then all tests of Foo.Do will depend on the success of TestToHex_works
- そう?他のクラスの成功に依存するクラスはありませんか?