我想看看测试用例是如何驱动界面设计的。
现在,如果我有一个带有方法的接口:
public interface UserService { User getNextUser(); }
如果UserServiceImpl是UserService的实现,那么根据我对模拟对象的理解,我应该只模拟UserServiceImpl的依赖项,就像UserRepository一样,因为只有这样我才能真正测试行为,即UserServiceImpl是否调用UserRepository。
但是,如果我必须在不创建UserServiceImpl的情况下编写一个UserServiceTest,那么我看到的唯一方法就是创建一个UserService的模拟,这似乎不太正确。
我在哪里做错了呢?
发布于 2010-09-19 11:49:29
我不能说我完全理解你的问题是什么意思,但底线是你不能测试一个普通的界面。如果没有实现,单元测试就没有什么可测试的。
界面可能“错误”的唯一原因是它没有满足它的设计要求,而这是只有人类才能知道的事情。
发布于 2010-09-20 11:37:28
您的测试用例应该通过要求client
在对象上调用getNextUser()
来驱动接口设计。您可以为您的client
测试模拟一个对象。
在有许多客户端调用此方法的情况下,您可能希望在此时创建接口,以便不同的宿主类可以提供不同的行为。
TDD (显然还有BDD)推动了行为的发展。接口是一个很好的副作用。
发布于 2010-11-23 20:06:39
我的团队今天正在考虑测试接口。我们围绕这个主题提出了两个问题,如何和为什么?(我们在VS2010中使用MS Unit Test Framework和CCNET来自动化构建和测试执行)
1.如何测试接口?
本文建议定义一个对象来实现接口(我假设是非显式的)。新建对象并使用is运算符来查看该对象是否实现了接口。http://en.csharp-online.net/Test_for_an_interface_implementation
另一种方法是在测试项目内的类中显式实现接口。如果测试项目没有构建,那么它就会被破坏。这种要么全有要么全无的方法不是一个好主意,因为它会阻止其他测试运行。
2.测试接口的价值是什么?
此时,我只看到测试显示接口与预期的不同,这意味着它发生了变化。如果你正在监控设计没有改变,这将是很重要的。如果您的开发人员可以访问应用程序和测试项目的源代码,那么在链接接口时,他们总是可以更改测试以通过测试。
https://stackoverflow.com/questions/3745510
复制