TestMethod生成错误CS0201

时间:2012-08-15 14:21:41

标签: c# unit-testing mstest

这可能是我需要离开我的系统的哲学咆哮,另一方面我可能做错了,如果是的话请告诉我!

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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