标签: easymock

测试使用EasyMock调用void方法

这可能吗?我尝试过,EasyMock.expectLastCall().times(0);但EasyMock抱怨时间必须> = 1

java unit-testing easymock

16
推荐指数
4
解决办法
2万
查看次数

EasyMock:java.lang.IllegalStateException:1匹配预期,2记录

我遇到了EasyMock 2.5.2和JUnit 4.8.2(通过Eclipse运行)的问题.我在这里阅读了所有类似的帖子,但没有找到答案.我有一个包含两个测试相同方法的测试的类.我正在使用匹配器.

  1. 每次测试都在单独运行时通过.
  2. 第一个测试总是通过 - 如果我在文件中切换测试的顺序,这是真的.

以下是测试代码的简化版本:

private Xthing mockXthing;
private MainThing mainThing;

@Before
public void setUp() {
    mockXthing = EasyMock.createMock(Xthing.class);
    mainThing = new MainThing();
    mainThing.setxThing(mockXthing);
}

@After
public void cleanUp() {
    EasyMock.reset(mockXthing);
}

@Test
public void testTwo() {
    String abc = "abc";
    EasyMock.expect(mockXthing.doXthing((String) EasyMock.anyObject())).andReturn(abc);
    EasyMock.replay(mockXthing);
    String testResult = mainThing.testCallingXthing((Long) EasyMock.anyObject());
    assertEquals("abc", testResult);
    EasyMock.verify(mockXthing);
}

@Test
public void testOne() {
    String xyz = "xyz";
    EasyMock.expect(mockXthing.doXthing((String) EasyMock.anyObject())).andReturn(xyz);
    EasyMock.replay(mockXthing);
    String testResult = mainThing.testCallingXthing((Long) EasyMock.anyObject());
    assertEquals("xyz", testResult);
    EasyMock.verify(mockXthing);
}
Run Code Online (Sandbox Code Playgroud)

第二次(或最后一次)测试总是失败,并出现以下错误:

java.lang.IllegalStateException: 1 …
Run Code Online (Sandbox Code Playgroud)

java easymock matcher

16
推荐指数
2
解决办法
3万
查看次数

PowerMock,EasyMock和Mockito框架有什么区别?

我是模拟框架的新手,我的工作需要模拟框架来完成单元测试.在当前的代码库中,我可以看到上面3个框架正在不同的地方用于单元测试.那么,我应该在上述3个框架中选择哪一个?

junit easymock mockito powermock

16
推荐指数
1
解决办法
2万
查看次数

我可以模拟一个超类方法调用吗?

有时,您希望测试一个类方法,并且希望在调用超类方法时进行预期.我没有找到一种方法来使用easymock或jmock在java中做这个期望(我认为这是不可能的).

有一个(相对)干净的解决方案,用超类方法逻辑创建一个委托,然后设置它的期望,但我不知道为什么以及什么时候使用该解决方案?任何想法/例子?

谢谢

java tdd easymock mocking jmock

15
推荐指数
3
解决办法
2万
查看次数

模拟Runtime.getRuntime()?

任何人都可以提出任何有关如何最好地使用EasyMock预期来电的建议Runtime.getRuntime().exec(xxx)吗?

我可以将调用移动到另一个实现接口的类中的方法,但不希望在理想的世界中.

interface RuntimeWrapper {
    ProcessWrapper execute(String command) throws IOException;
}

interface ProcessWrapper {
    int waitFor() throws InterruptedException;
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有人有任何其他建议?

java junit unit-testing easymock runtime.exec

15
推荐指数
2
解决办法
7088
查看次数

如何EasyMock调用返回通配符泛型的方法?

我们正在考虑切换到Spring 3.0并遇到Spring 3.0,EasyMock和Java Generics的问题.

在一个地方,我们正在嘲笑Spring 3.0 AbstractBeanFactory,特别是这个方法:

public Class<?> getType(String name) throws NoSuchBeanDefinitionException { ... }
Run Code Online (Sandbox Code Playgroud)

在早期版本的Spring中,这会返回一个非泛型的,一切都很好.但是,使用泛型,我们遇到了麻烦:

expect(mockBeanFactory.getType(CLASS_NAME)).andReturn(SOME_CLASS);
Run Code Online (Sandbox Code Playgroud)

因为getType返回Class<?>,andReturn需要Class<?>作为参数,这根本不能正常工作.

这有一个已知的解决方法吗?

java generics spring easymock wildcard

14
推荐指数
1
解决办法
4468
查看次数

自动装配由EasyMock工厂方法生成的bean?

我有一个看起来很奇怪的问题.我有以下设置:

界面:

package com.example;

public interface SomeDependency {
}
Run Code Online (Sandbox Code Playgroud)

弹簧组件:

package com.example;

@Component
public class SomeClass {
}
Run Code Online (Sandbox Code Playgroud)

带有由EasyMock生成的模拟bean的spring test配置:

<beans ....>
    <context:component-scan base-package="com.example"/>

    <bean id="someInterfaceMock" class="org.easymock.EasyMock" factory-method="createMock">
        <constructor-arg value="com.example.SomeDependency" />
    </bean> 
</beans>
Run Code Online (Sandbox Code Playgroud)

并进行单元测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/testconfig.xml")
public class SomeClassTest {

    @Autowired
    SomeClass someClass;

    @Autowired
    SomeDependency someDependency;

    @Test
    public void testSomeClass() throws Exception {
        assertNotNull(someClass);
    }

    @Test
    public void testSomeDependency() throws Exception {
        assertNotNull(someDependency);
    }
}
Run Code Online (Sandbox Code Playgroud)

项目编译并且测试通过没有任何问题,即SomeClass("真实"对象)和SomeDependency(由EasyMock生成的模拟对象)的自动装配成功.

但是,如果我将SomeClass的实现更改为:

@Component
public class SomeClass { …
Run Code Online (Sandbox Code Playgroud)

java spring easymock factory-method autowired

14
推荐指数
1
解决办法
1万
查看次数

EasyMock中"same"和"eq"之间的区别

EasyMock中'same'和'eq'之间是否存在显着(甚至任何)差异?

java easymock

14
推荐指数
2
解决办法
5472
查看次数

EasyMock:获取EasyMock.anyObject()的真实参数值?

在我的单元测试中,我使用EasyMock来创建模拟对象.在我的测试代码中,我有类似的东西

EasyMock.expect(mockObject.someMethod(anyObject())).andReturn(1.5);
Run Code Online (Sandbox Code Playgroud)

所以,现在EasyMock将接受任何电话someMethod().有没有办法获得传递给它的真正价值mockObject.someMethod(),或者我需要EasyMock.expect()为所有可能的情况编写声明?

java unit-testing easymock

13
推荐指数
1
解决办法
2万
查看次数

如何模拟void方法抛出异常?

我有这样的结构:

public class CacheWrapper {
    private Map<Object, Object> innerMap;

    public CacheWrapper() {
        //initialize the innerMap with an instance for an in-memory cache
        //that works on external server
        //current implementation is not relevant for the problem
        innerMap = ...;
    }

    public void putInSharedMemory(Object key, Object value) {
        innerMap.put(key, value);
    }

    public Object getFromSharedMemory(Object key) {
        return innerMap.get(key);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的客户端类(你可以说它看起来像这样):

public class SomeClient {
    //Logger here, for exception handling
    Logger log = ...;
    private CacheWrapper cacheWrapper;
    //getter and setter for cacheWrapper... …
Run Code Online (Sandbox Code Playgroud)

java unit-testing easymock exception powermock

13
推荐指数
2
解决办法
3万
查看次数