当前位置: 首页 > 知识库问答 >
问题:

EasyMock中expectLastCall().once()的正确使用

薄龙光
2023-03-14

我正在为一个特定的方法编写junit测试。该方法包含对DAO类中其他方法的调用,我正在用EasyMock对其进行模拟。

    @Before
    public void setUp() throws Exception{
    this.fooService = new FooService();
    this.fooMock = createStrictMock(FooDAO.class);
    }

    @Test
    public void test_fooTest(){

    String arg1 = "arg1";
    String arg2 = "arg2";
    this.fooService.setFooDAO(fooMock);
    expect(this.fooMock.someMethod(arg1, arg2)).andReturn(something);
    fooMock.methodThatShouldBeCalledOnce(EasyMock.<Object>anyObject());
    EasyMock.expectLastCall().once();
    replay(this.fooMock);
    this.fooService.methodUnderTest(someArg, someArg2);
    verify(this.fooMock);

    }

共有1个答案

叶景龙
2023-03-14

如果您不关心某些方法,您应该创建一个不错的mock。那么,实际上,就不需要调用ExpectLastCall了。它是隐式的,但可以是一个很好的做法,使它明显地表明您在嘲笑一个方法。once()也不需要,因为它是默认值。

因此,如果使用一个漂亮的mick来重新表达它,删除隐式调用,添加静态导入,而不添加冗余的“this”,您应该得到:

@Before
public void setUp() throws Exception{
   fooService = new FooService();
   fooMock = createNiceMock(FooDAO.class);
   fooService.setFooDAO(fooMock);
}

@Test
public void test_fooTest(){  
   fooMock.methodThatShouldBeCalledOnce(anyObject());

   replay(fooMock); // or replayAll() if you extend EasyMockSupport

   fooService.methodUnderTest(someArg, someArg2);
   verify(fooMock); // or verifyAll() if you extend EasyMockSupport
}
 类似资料:
  • 问题内容: 我想减少我们的构建(使用ant)运行测试所花费的时间。目前,我使用的是default ,它 在每个测试类 () 上派生一个新的虚拟机 。 我正在考虑改用,但 不确定是否会 以某种方式 耦合测试, 并可能在运行测试后给我假阳性和/或假阴性结果。 问题: 每个测试用例是否都会获得一个新的ClassLoader, 以便不再可以访问/查看以前运行的所有静态引用? 是否还有 其他 导致测试依赖/

  • 描述 (Description) @import (once)关键字确保仅导入文件一次,并且将忽略该文件的任何后续import语句。 这是@import语句的默认行为。 这是在version 1.4.0中发布的。 例子 (Example) 以下示例演示了在LESS文件中使用once关键字 - <html> <head> <link rel = "stylesheet" href

  • 描述 (Description) 它就像一个on事件,但导致绑定回调只在被删除之前触发一次。 语法 (Syntax) object.once(event, callback function, [context]) 参数 (Parameters) event - 它绑定一个对象。 callback - 它是对代码的引用。 context - 它是一个可以传递给回调函数的对象。 例子 (Examp

  • Once A small Android library to manage one-off operations for API 14 and higher. Some things should happen once. Users should only get the guided tour once. Release notes should only pop up once every

  • 因此,这是我第一次使用EasyMock,我正在尝试向一些遗留代码添加一些单元测试。 遗留代码在Spring 3.1中,我使用的是EasyMock 3.4。 我在这里试图完成的是测试一个调用dao的服务(在Spring中编写的方法)。 代码如下: 这是我用EasyMock编写的单元测试 所以基本上发生的是,我的单元测试失败了,因为 为空! 是的,如果它实际被执行,它将为空,因为在数据库中没有clie

  • 我正在尝试为以下类编写单元测试: 还有一些其他方法,但这个设置代码是与我的问题相关的。在单元测试中,我想模拟(使用EasyMock)对象以及它将返回的和对象: 当我尝试用JUnit运行它时,我得到以下错误: 在上没有我可以看到的公共变量。我是EasyMock的新手,所以我想我的问题是:对于我应该告诉我的mock返回什么,以及如何告诉它这样做?我根本不知道为什么设置代码会被调用,所以这是另一个谜。更