这可能是我需要离开我的系统的哲学咆哮,另一方面我可能做错了,如果是的话请告诉我!
我有一个单元测试看起来像这样:
[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;
}
但是这(对我而言)似乎更不正确,因为您现在已将其分配到变量中,除了将错误静音之外什么都不做。
有没有更好的方法来编写测试?
答案 0 :(得分:2)
如果要检查该类型没有该名称的属性,则测试应使用typeof(whatever)
上的反射;如果你想检查getter / setter 方法是否会引发NotImplementedException
,你需要实际调用该方法。
毕竟,你可能实现了getter而不是setter;在这种情况下你想要“提及”财产做什么?最好实际调用您感兴趣的代码并断言发生的事情。
我想如果它是你感兴趣的吸气剂,你可以反映获得getter方法,然后只需Invoke
它(这不需要声明一个本地的你然后不要使用),但这比你已经确定的解决方案要冗长得多。