我的应用程序中有一个常量,它决定了程序其他部分的操作。我更改此常数以快速轻松地更改程序的操作。
在我的例子中,常数是 abool
所以它可以有两个值之一。
我想编写一个测试,以确保无论常量是否设置为 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,再次断言。但是,我首先将其设为常量的原因是为了保证它不会在运行时更改。
我想我真正想要的是一种使其在适当的应用程序方面保持不变的方法,但就测试项目而言不是不变的。
那么我怎样才能使这样的情况起作用呢?