私のアプリケーションには、プログラムの他の部分の動作を決定する定数があります。この定数を変更して、プログラムの動作をすばやく簡単に変更します。
私の場合、定数はabool
なので、2つの値のいずれかを持つことができます。
定数がtrueに設定されているかどうかに関係なく、コードが機能していることを確認するテストを作成したいと思います。
たとえば、私の方法は次のとおりです。
public boolean IsEqual(float a, float b) {
var epsilon = 0.0001;
if (Constants.Exact) return (Math.Abs(a-b) < epsilon);
else return (Math.Floor(a) == Math.Floor(b));
}
Constants
このように見えます:
public static class Constants {
/// <summary>
/// Determines whether an exact comparison should be made, or whether fractional parts should be disregarded.
/// </summary>
public const bool Exact = true;
}
そして、テスト方法は次のとおりです。
[TestMethod]
public void TestEquality() {
var five = 5;
var three = 3;
Assert.True(Equals(five, three));
}
私が思いつくことができる解決策:
- 定数が存在しないかのようにテストを記述し、定数をに
true
設定してテストを実行してから、falseに設定してテストを実行します。このような定数が8つある場合、テストを256回実行したくないので悪いです。 - 一定にしないでください。テストメソッド内で、最初に定数をtrueに設定し、アサートしてからfalseに設定し、再度アサートします。ただし、そもそも定数にしたのは、実行時に変更されないことが保証されているためです。
私が本当に望んでいるのは、アプリケーション自体に関しては一定にする方法ですが、テストプロジェクトに関しては一定ではない方法だと思います。
では、どうすればこのような状況を機能させることができますか?