3

这可能是我需要摆脱系统的哲学咆哮,另一方面,我可能做错了什么,如果是这样,请告诉我!

我有一个单元测试,看起来像这样:

[TestMethod]
[ExpectedException(typeof(NotImplementedException))]
public void Test_XXXAccess()
{
    ControlPoint.MyObject.XXXAccess;
}

当测试在特定上下文中运行时,它会检查属性 XXXAccess 是否未实现。此测试生成编译错误 CS0201:“只有赋值、调用、递增、递减和新对象表达式可以用作语句”虽然我同意这是生产代码中的错误,但我认为将其应用于单元测试是错误的。当然我可以将代码重写为:

[TestMethod]
[ExpectedException(typeof(NotImplementedException))]
public void Test_XXXAccess()
{
    MyType x = ControlPoint.MyObject.XXXAccess;
}

但这(对我而言)似乎更不正确,因为您现在已将其分配给一个变量,除了使错误静音之外什么也不做。

有没有更好的方法来编写测试?

4

1 回答 1

2

如果您想检查该类型是否没有该名称的属性,则测试应在typeof(whatever);上使用反射。如果要检查 getter / setter方法是否抛出NotImplementedException,则需要实际调用该方法。

毕竟,您可能实现了 getter 而不是 setter;在这种情况下,您只想“提及”该物业做什么?最好实际调用您感兴趣的代码并断言会发生什么。

我想如果它是您感兴趣的 getter,您可以反映以获取 getter 方法,然后就是Invoke它(这不需要声明一个您然后不使用的本地),但这会比您已经确定为解决方案的内容。

于 2012-08-15T14:27:22.997 回答