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

使用EasyMock和Junit忽略方法/作废方法

吕骞尧
2023-03-14

“添加了更多详细信息”

我想模拟某个空方法,但我不太确定如何。我读过EasyMock,但我不知道当它是一个空方法时该怎么办,这是我的主类;

主类

public class Main {
    Updater updater = new Updater(main.getID(), main.getName(),....);

    try {
        updater.updateContent(dir);
    }

我想模拟updater.update内容(dir);这样我就可以跳过尝试

更新程序类

private String outD;

public void updateContent(final String outDir) throws Exception {


    outD = outDir;
    if (...) {
        ....;
    }

}

<代码> 私有void方法

这是我目前为止的测试课,

public class MainTest {


    @Before
    public void setUp() {

    }

    @Test
    public void testMain() { 


try {


        try {
            Updater updater = EasyMock.createNiceMock(Updater.class);
            updater.updateContent("/out");
            EasyMock.expectLastCall().andThrow(new RuntimeException()); 

            EasyMock.replay(updater);

            updater.updateContent("/out");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 


    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}


}
    }

(编辑)谢谢。

共有1个答案

柳宏深
2023-03-14

对于返回void的方法,必须以以下方式记录行为:

 Updater updater = EasyMock.createNiceMock(Updater.class);
 updater.updateContent("someDir"); // invoke the easy mock proxy and
 // after invoking it record the behaviour.
 EasyMock.expectLastCall().andThrow(new RuntimeException()); // for example

 EasyMock.replay(updater);

 updater.updateContent("someDir"); // will throw the RuntimeException as recorded

希望您有以下主要课程

public class Main {
    private Updater updater;

    private int updatedContentCount; // introduced for the example

    public Main(Updater updater) {
        this.updater = updater;
    }

    public void updateContent() {
        try {
            updater.updateContent("/out");
            updatedContentCount++;
        } catch (Exception e) {
            // skip for this example - normally you should handle this
        }
    }

    public int getUpdatedContentCount() {
        return updatedContentCount;
    }

}

更新程序的API如下所示

public class Updater {

    public void updateContent(String dir) throws Exception {
        // do something
    }
}

然后,对主类的测试如下:

public class MainTest {

    private Updater updater;
    private Main main;

    @Before
    public void setUp() {
        updater = EasyMock.createNiceMock(Updater.class);
        main = new Main(updater);
    }

    @Test
    public void testUpdateCountOnException() throws Exception {
        updater.updateContent("/out");
        EasyMock.expectLastCall().andThrow(new RuntimeException());
        EasyMock.replay(updater);
        main.updateContent();
        int updatedContentCount = main.getUpdatedContentCount();
        Assert.assertEquals(
                "Updated count must not have been increased on exception", 0,
                updatedContentCount);
    }
}

主测试测试更新程序异常时是否正确处理了更新计数。

 类似资料:
  • 我试图将EasyMock与JUnit一起使用,但在对JUnit4方法中的模拟依赖项调度方法调用时遇到了困难。 在下面的示例中,测试类正在测试类。被传递到的构造函数,在构造函数中调用的方法之一,返回初始化所需的值。初始化的过程对所有测试都是相同的,所以我用JUnit4注释修饰方法。 在测试方法时,我们期望调用mock实例以返回一个值,我们在方法中调度该值。但是,这个测试意外失败,出现错误,尽管这个调

  • 问题内容: 比方说,我有一个名为测试类有几种方法,,,等,每个注释。 现在让我们说我将子类归类为,并且我不会覆盖任何内容。目前是空的。 当我从运行测试,方法,以及因为测试运行不从类和基类的测试方法区分是通过测试运行执行。 如何强制测试运行程序放弃基类的测试? 问题答案: 重组您的测试类。 如果您不想使用基类中的测试,则不要扩展它 如果您需要基类的其他功能,请将该类一分为二-测试和其他功能

  • 我尝试从以下方法创建单元测试,但我找不到一个解决方案来模拟每个方法内的调用,请您帮助我使用EasyMock为这些方法创建JUnit Test: 提前感谢

  • 问题内容: 这个问题本质上是相反的这一个 我有这样的方法: 当我加载它时,Hibernate抱怨我没有称为的属性。但是我不想要一个叫做-我不需要存储数据的属性-这仅仅是逻辑。 hibernate状态: org.hibernate.PropertyNotFoundException:在com.mycomp.myclass类中找不到空置属性的设置器… 我可以在方法中添加注释以使Hibernate忽略它

  • 有没有一种方法可以忽略使用mapstruct在此代码示例中第三种方法的映射器的生成?

  • 问题内容: 我正在尝试使用EasyMock模拟一些数据库接口,以便可以测试包装方法中的业务逻辑。我在测试设置中使用通过以下方法返回的方法一直都很好。 然后在我的实际测试中 然后,该服务连接到dbmapper并返回对象(使用setter方法注入了映射器) 这些类型的模拟似乎工作正常。但是,当我尝试进行测试 此方法称为void方法。 正是这种方法使我无法解决问题。我尝试了以下 正如其他一些帖子/问题似