测试方法生成错误 CS0201



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

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

[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;
}

但这(对我来说)似乎更不正确,因为您现在已将其分配给一个变量,只不过是使错误静音。

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

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

毕竟,你可能已经实现了getter,但没有实现setter;在这种情况下,你想"提及"属性做什么?最好实际调用您感兴趣的代码并断言会发生什么。

我想如果它是你感兴趣的 getter,你可以反思以获得 getter 方法,然后Invoke它(这不需要声明一个你不使用的本地),但这将比你已经确定的解决方案要详细得多。

最新更新