我已经为此功能进行了测试设置,但我想知道这是否是最好的方法。我有这样的方法:
public static string RunTableInfoCommand(IMapinfoWrapper wrapper,
TableInfoEnum infoToReturn)
{
//pass the int value of infoToReturn to underlying COM object eg wrapper.
}
TableInfoEnum看起来像这样(缩短版本):
public enum TableInfoEnum
{
TAB_INFO_NAME = 1,
TAB_INFO_NUM = 2,
TAB_INFO_TYPE = 3,
TAB_INFO_NCOLS = 4,
TAB_INFO_MAPPABLE = 5,
TAB_INFO_READONLY = 6,
TAB_INFO_TEMP = 7
}
当我将枚举传递给COM对象时,它将根据枚举值返回不同的字符串结果。 例如
TAB_INFO_NAME = "Water_Mains"
TAB_INFO_NUM = "1"
COM对象将始终根据枚举值返回不同值的字符串。
我如何测试我的RunTableInfoCommand是否正常工作,到目前为止,我有一个这样的测试:
public void RunTableInfoCommandPassingTableNumberShouldReturnExpectedName()
{
string ExpectedCommand = "TableInfo(1,{0})".FormatWith((int)TableInfoEnum.TAB_INFO_NAME);
mockmapinfo.Expect(m => m.Evaluate(ExpectedCommand))
.Returns("Water_Mains");
string name = Table.RunTableInfoCommand(mockmapinfo.Object,
1,
TableInfoEnum.TAB_INFO_NAME);
Assert.AreEqual("Water_Mains", name);
}
它确实有效,但我觉得我错过了什么,你如何测试所有不同的枚举类型。
答案 0 :(得分:2)
如果我理解正确,那么您的测试方法应该将枚举值传递给COM对象并返回COM对象返回的字符串。因此,测试的目标是确保方法正确地与COM对象通信。
我会模拟COM对象以返回每个枚举值的预期字符串,然后将其传递给方法。
答案 1 :(得分:0)
好吧也许可以制作一个循环。这将通过所有枚举并打印出来。如果您希望它是完全自动的,则必须将所有正确的值放入数组中并让计算机进行比较。无论哪种方式,它看起来像你错过的一个重要部分是循环。
public CheckAllEnumValues() {
// somehow construct mockmapinfo here
TableInfoEnum[] values = Enum.GetValues(typeof(TableInfoEnum));
foreach(TableInfoEnum v in values) {
string result = RunTableInfoCommand(mockmapinfo.Object, v);
Console.WriteLine(Enum.GetName(typeof(TableInfoEnum), v) + ": " + result);
}
}