首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMockit - Expectations MockUp<T>为什么一个可以工作,另一个不能?

JMockit - Expectations MockUp<T>为什么一个可以工作,另一个不能?
EN

Stack Overflow用户
提问于 2015-02-25 01:27:51
回答 2查看 11.2K关注 0票数 7

我正在尝试(仍然)学习JMockit的细节。这是另一个JMockit奇怪的例子,我就是搞不懂。使用NonStrictExpectations运行测试效果很好。但是,使用MockUp运行则不会。我不知道为什么。有什么想法吗?我运行的是JMockit 1.5。

测试方法:

代码语言:javascript
复制
private List<Foo> getFooList(List<FooStatement> fooStatements){
    List<Foo> FooList = new ArrayList<Foo>();

    for(FooStatement at: fooStatements){
        List<Foo> aList = at.getFoos();
        FooList.addAll(aList);
    }

    return FooList;
}

成功的期望测试

代码语言:javascript
复制
@Test
public void getFooListWithExpectationsTest(
        @Mocked final FooStatement mockFooStatement,
        @Mocked final Foo mockFoo
){

    List<FooStatement> fooStatementList = new ArrayList<>(Arrays.asList(
            mockFooStatement,
            mockFooStatement
    ));

    new NonStrictExpectations(){{
        mockFooStatement.getFoos();
        result = new ArrayList<Foo>(Arrays.asList(mockFoo));
    }};

    List<Foo> fooList = Deencapsulation.invoke(handler, "getFooList", fooStatementList);
    Assert.assertTrue(fooList.size() == 2);
}

MockUp的断言错误(0 != 2)

代码语言:javascript
复制
@Test
public void getFooListWithMockUpTest(
        @Mocked final FooStatement mockFooStatement,
        @Mocked final Foo mockFoo
){

    new MockUp<FooStatement>(){
        @Mock
        public List<Foo> getFoos(){
            return new ArrayList<Foo>(Arrays.asList(mockFoo));
        }
    };

    List<FooStatement> fooStatementList = new ArrayList<>(Arrays.asList(
            mockFooStatement,
            mockFooStatement
    ));

    List<Foo> fooList = Deencapsulation.invoke(handler, "getFooList", fooStatementList);
    Assert.assertTrue(fooList.size() == 2);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-25 01:38:11

您错误地使用了MockUp<?>MockUp<T?将告诉JMockit重新定义加载到JVM中的类,以便用MockUp<FooStatement中定义的类替换它们,而不是FooStatement的实际类初始化。

基本上,MockUp<FooStatement> new FooStatement()**.**的调用会自动替换MockUp<FooStatement>的调用

尝试如下所示:

代码语言:javascript
复制
@Test
public void getFooListWithMockUpTest(@Mocked final Foo mockFoo){

    new MockUp<FooStatement>(){
        @Mock
        public List<Foo> getFoos(){
            return new ArrayList<Foo>(Arrays.asList(mockFoo));
        }
    };

    List<FooStatement> fooStatementList = new ArrayList<>(Arrays.asList(
            new FooStatement(),
            new FooStatement()
    ));

    List<Foo> fooList = Deencapsulation.invoke(handler, "getFooList",     fooStatementList);
    Assert.assertTrue(fooList.size() == 2);
}
票数 4
EN

Stack Overflow用户

发布于 2019-04-24 13:21:16

MockUp已弃用,请使用Expectations

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28702346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档