java - 如何纠正 junit 给出预期的断言错误 :1 and actual:0?

标签 java junit

我有一个像这样的 junit 方法:

    public void testMyStuff() {
        IMockBuilder<BackingBean> builder = createMockBuilder(BackingBean.class);
        builder.addMockedMethod("getMyFacesContextSessionMap");
        BackingBean bean = builder.createMock();
        MyVO MyVO = new MyVO();
        List<MyVO> MyVOList = new ArrayList<MyVO>();
        HttpServletRequest req = createMock(HttpServletRequest.class);
        bean.setHttpServletRequest(req);
        MyVOList.add(buildMyVO());
        expect(bean.getMyFacesContextSessionMap()).andReturn(
                new HashMap<String, Object>());
        expect(ac.getBean("MyService")).andReturn(service);
        expect(MyFacade.getMyStuff(MyVO)).andReturn(MyVOList);
        expect(bean.getMyFacesContextSessionMap()).andReturn(
                new HashMap<String, Object>());
        replay(bean, MyFacade);
        bean.setService(service);
        String returnString = bean.myStuff();
        assertEquals("myNo", returnString);
    }

当我在 eclipse 中将其作为 junit 运行时,出现此错误:

java.lang.AssertionError: 
    Unexpected method call MyFacadeLocal.getMyStuff(MyVO@8c64cdd8):
    MyFacadeLocal.getMyStuff(MyVO@d79a467f): expected: 1, actual: 0
    at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:44)
    at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:85)
    at $Proxy1.getMyStuff(Unknown Source)

我不明白如何纠正这个问题。有人可以帮我吗?

最佳答案

ArgumentMatcher 示例:

public class CollectionCountMatcher implements IArgumentMatcher
{
    private int expectedCount;

    public CollectionCountMatcher(int count) {
        super();
        this.expectedCount = count;
    }

    public boolean matches(Object actual) {
         return (actual instanceof Collection) 
         && ((Collection) actual).size() == expectedCount;
    }

    public static final Integer eqObject(Integer inValue) {
        EasyMock.reportMatcher(new CollectionCountMatcher (inValue));
        return inValue;
    }

    public void appendTo(StringBuffer buffer) {
        buffer.append("collectionContains(" + expectedCount + ")");
    }
}

您创建一个 MyVOMatcher 并调用您的模拟方法,如下所示:

expect(MyFacade.getMyStuff(MyVOMatcher.eqObject(MyVO))).andReturn(MyVOList);

编辑:或者你也可以做什么,但这种工作方式不太严格,并且不会检查不同的对象,这样做是这样的:

expect(MyFacade.getMyStuff(EasyMock.anyObject(myVO.class))).andReturn(MyVOList);

这肯定有效,但当然你可以传递每个可能的参数,只要它是 MyVO 类型

关于java - 如何纠正 junit 给出预期的断言错误 :1 and actual:0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20513333/

相关文章:

java - Java现在要学哪个UnitTest框架?

spring - SpringJUnit4ClassRunner 问题,H2 db inetgration 测试

class - WebDriver 页面对象和大量定位器

Java:如何保存MouseButton状态?

java - 从 takePicture 回调保存图像时 Android 图像质量差

java - 我可以在 Java 中使用枚举来定义要调用/使用的类吗?如果是这样,怎么办?

java - 我得到的分母为负数

java - hibernate 和 SQL Server : Timestamp format must be yyyy-mm-dd hh:mm:ss

java - 如何使用 Java 参数中的索引使用递归创建删除方法?

java - 如何对 Java EE 代码进行单元测试?