我的應用程序中有一個常量,它決定了程序某些其他部分的操作。我改變這個常數可以快速輕鬆地改變程序的運行。測試常量的所有可能值
在我的情況下,常數是bool
,所以它可以有兩個值中的一個。
我想編寫一個測試,以確保我的代碼正常工作,無論常量是否設置爲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,再次斷言。然而,我首先使它保持不變的原因是它保證在運行時不會改變。
我想我真正想要的是一種使應用程序本身保持恆定的方法,但就測試項目而言,這並不是一個常量。
那麼,我該如何做出這樣的工作?
我知道這不是你要求的,但使用==比較浮點數很少是一個好主意。你爲什麼想要啓用它? –
你可以用一個'internal' setter來使它成爲靜態的,那麼你只需要確保你不要在該項目中(或者通過InternalsVisibleTo'暴露它的項目中)更改它。 –
@BrianRasmussen編輯添加epsilon比較,但這只是一個簡單的例子。我實際上並沒有比較花車。 – Superbest