- class A{
- public String a(){
- return a;
- }
- }
-
- public class B extends A{
- public String b(){
- return b;
- }
- }
上面所示的是一个很常见的继承结构,但是就是这样的结构导致了在Mock对象时会产生某些令人困惑的问题。
假如在BConsumer这个类中用到了B,那么就需要把B的实例(这里先不讨论应该抽象出接口与否的问题)注入到BConsumer中去。如果我们要模拟的是b()这个方法,那自然一切都没问题。我这里用的是JMock来mock具体类:
java 代码
- Mockery context = new JUnit4Mockery() {
- {
- setImposteriser(ClassImposteriser.INSTANCE);
- }
- };
-
- ……
-
- @Test
- public void xxx(){
- BConsumer consumer = new BConsumer();
- B b = context.mock(B.class);
- context.checking(new Expectations(){{
- allowing(b).b();
- }});
- consumer.setB(b);
- ……
- }
可是如果我们需要模拟a()这个方法时,问题就出现了。
java 代码
- @Test
- public void xxxxx(){
- BConsumer consumer = new BConsumer();
- B b = context.mock(B.class);
- context.checking(new Expetations(){{
- allowing(b).a();
- }});
- consumer.setB(b);
- ……
- }
我们可以按照上面这种方式来写Mock么?当然不行!我们Mock的是B,但是实际调用的则是A中的方法a()!
那么可能就有人想到或许可以这样做:
java 代码
- @Test
- public void xxxxx(){
- BConsumer consumer = new BConsumer();
- A a = context.mock(A.class);
- context.checking(new Expetations(){{
- allowing(a).a();
- }});
- consumer.setB((B)a);
- ……
- }
但实际上,到了
consumer.setB((B)a);这一步的时候,我们得到的a实际上是通过cglib生成的对象,要转型成B就会出现ClassCastException。
那我们到底该怎么做才好呢?难道为了Mock测试的需要,就在B中把A中的a()重写一遍?如果要抽象出接口来,又该怎样抽象才合情合理?
恳请赐教。
分享到:
相关推荐
mock对象
Mock对象教程.pdf
Mock counterfeiter - 一个工具用于在Go中生成自容器,类型安全的测试Mock对象
使用mock时,需要对应的jar包,这里是EasyMock(EaskMock 3.1) 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库。它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证...
火龙果软件工程技术中心 本文内容包括:1.Mock对象的创建方法2.EasyMock使用示例3.利用XML文件配置Mock对象4.利用Mock对象定义机制配置预期结果5.使用配置文件运行测试用例6.结论下载参考资料本文主要讨论...
Classes contained in spring-mock.jar: org.springframework.mock.jndi.ExpectedLookupTemplate.class org.springframework.mock.jndi.SimpleNamingContext.class org.springframework.mock.jndi....
Python mock的基本使用介绍。Mock即模拟的意思。在Python中,提供了基于单元测试的Mock模块,它的主要作用是使用mock对象替代掉指定的Python对象,以达到模拟对象功能的行为。
mock练习
Google_Mock_启蒙篇 当你写一个原型戒是测试的时候,直接去依赖真实的对象通常是丌可行的戒是丌明智的。 Mock 对象实现不真实对象有着相同的接口,但你可以去指定 Mock 对象在运行时它做什么
mock
简单的mockServer、模拟后台生成数据、启动后像后台一样直接调用接口
Mock模拟测试,定义、好处、关键点、Mockito使用、Mock 对象的行为验证、Spy 对象验证等
ApiMock操作文档
mock测试实战
Django搭建mock系统
it is the cfa mock question, which is for 2013 June
在window或者linux上,模拟一个mock接口,可以实现等同的接口效果,本人测试过
mock&mysql;问题
Spring针对J2EE的常用Web接口提供了Mock,这些组件被发布于spring-mock.jar,介绍如下: MockHttpServletRequest:HttpServletRequest接口...说明:在提供关于Controller(控制器)的测试时,以上这些对象是最常用的。