如何在不首先实现接口的情况下测试接口?

时间:2010-09-19 11:39:07

标签: tdd

我试图了解测试用例如何推动界面设计。

现在,如果我有一个方法接口:

public interface UserService { User getNextUser(); }

如果UserServiceImpl是UserService的一个实现,那么根据我对模拟对象的理解,我应该只模拟UserServiceImpl的依赖关系,就像UserRepository一样,因为只有这样我才真正测试行为,即UserServiceImpl调用UserRepository或者不

但是,如果我必须编写UserServiceTest而不创建UserServiceImpl,那么我看到的唯一方法是创建一个UserService的模拟,这似乎不太合适。

我在哪里错了?

3 个答案:

答案 0 :(得分:0)

我不能说我完全理解你想要解决的问题,但最重要的是你不能测试一个简单的界面。如果没有实现,则没有任何单元测试可供测试。

接口可能“错误”的唯一方法是,如果它不符合其设计要求,那只是人类可以说的。

答案 1 :(得分:0)

您的测试用例应通过在对象上调用client getNextUser()来推动界面设计。您可以模拟出client的测试对象。<​​/ p>

如果有许多客户端调用此方法,您可能希望此时创建接口,以便不同的主机类可以提供不同的行为。

TDD(显然是BDD)推动了行为的发展。接口是一个很好的副作用。

答案 2 :(得分:0)

我的团队正在考虑今天测试界面。我们围绕这个主题提出了两个问题,如何以及为什么? (我们在VS2010中使用MS Unit Test Framework和CCNET来自动构建和测试执行)

<强> 1。你如何测试界面?

本文建议定义一个对象实现接口(非显式我假设)。您新建了该对象并使用is运算符来查看该对象是否实现了该接口。 http://en.csharp-online.net/Test_for_an_interface_implementation

另一种方法是在测试项目中的类中显式实现接口。如果测试项目没有构建那么它就坏了。这种全有或全无的方法并不是一个好主意,因为它会阻止其他测试运行。

<强> 2。测试接口有什么价值?

此时我只看到测试显示界面与预期不同,这意味着它发生了变化。如果您正在监视设计没有改变,这将非常重要。如果您的开发人员可以访问应用程序和测试项目的源代码,那么在链接接口时,他们总是可以更改测试以通过。