测试界面有意义吗?

时间:2011-05-05 05:49:37

标签: tdd

我是TDD的新手,但我不确定为什么要测试界面?

下面的代码是否有意义?

public interface IInterface
{
    int Value { get; }
}


[TestMethod]
public void Test_iinterface_value()
{
    var iinterface = mockery.NewMock<IInterface>();
    Expect.Once.On(iinterface).GetProperty("Value").Will(Return.Value(10));
    Assert.AreEqual(iinterface.Value, 10, "Doh!");
}

5 个答案:

答案 0 :(得分:8)

除非我弄错了,否则看起来你正在创建一个模拟对象,在被要求时返回给定的值。然后你要求价值&amp;你得到它(惊喜)。我会说编写这样的测试是没有意义的,除非你正在测试模拟框架本身,或者你希望编译器对你玩一些肮脏的技巧。

答案 1 :(得分:3)

这称为the Mockery TDD anti-pattern

但是,您可能希望编写一组适用于给定接口的所有实现者的测试,以确保正确实现合同。例如,这就是Grensesnitt的作用。

答案 2 :(得分:0)

测试界面主要是进行集成测试,有效地测试整个堆栈。 UI中的输入由应用程序逻辑处理,通过UI响应,您可以看到“大图” - 即您的应用程序按预期工作。

在大多数情况下,UI由标准的,框架提供的类组成,只有很小的改动,所以除非你对UI框架的功能有疑问,或者自己开发一个,否则没有真正需要对它进行单元测试。 UI类。

如果您没有使用大量自定义的UI类,则不应该出于其他原因需要进行单元测试 - UI类中不应该有应用程序逻辑。

答案 3 :(得分:0)

为接口创建模拟的想法是测试另一个对象(“被测对象”),它需要正确创建或初始化该模拟。创建一个模拟仅用于测试模拟本身IMHO似乎忽略了单元测试的重点。

但是,我可以想到一种情况,即为接口编写测试可能有意义。如果您正在编写单元测试,不仅仅是为了测试目的,而且还有一个概要如何使用某些东西,那么这样的“测试接口”可能会演示如何使用IInterface。当然,如果你有一个更复杂的界面,使用它不那么明显,那就更合理了。

答案 4 :(得分:0)

测试界面没有意义。测试模拟对象也没有意义 - 除非您使用模拟对象来测试抽象类的实现方法(c#定义中的抽象)。