junits因easymock失败

时间:2018-09-30 17:14:40

标签: junit mocking easymock

我正在使用EasyMock为我的二十一点游戏编写单元测试。 但是我遇到java.lang.IllegalArgumentException: Cannot subclass final class class com.blackjack.game.cards.Card错误。

虽然,我觉得我做对了。 这是我的测试课:

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.easymock.EasyMock;
import org.easymock.EasyMockRunner;
import org.easymock.EasyMockSupport;

@RunWith(EasyMockRunner.class)
public class handTest extends EasyMockSupport{
    private Hand hand;
    private Card seven, nine, ten, jack, ace;

    @Before
    public void setUp() throws Exception
    {
        seven = EasyMock.createNiceMock(Card.class);
        EasyMock.expect(seven.getValue()).andStubReturn(7);
        EasyMock.expect(seven.toString()).andStubReturn("seven value: 7");

    }

    @Test
    public void testTotalHandValueByAddingNumbers() {
        replayAll();
        hand.addCard(seven);

        assertEquals(27, hand.getTotal());


    }
}

如果有人可以帮助我运行该程序,我将感到非常高兴。自从我编写单元测试以来已经有一段时间了。

编辑:我的类路径中同时包含Objenesis和cglib。

谢谢

2 个答案:

答案 0 :(得分:0)

您确定您还有其他用于类模拟的库吗?

cglib(2.2)和Objenesis(1.2)必须在类路径中才能执行类模拟

答案 1 :(得分:0)

您的课程com.blackjack.game.cards.Card很有可能是最终课程

createNiceMock或从某种意义上说EasyMock不能用来模拟最终的类。

在这种情况下,您将需要使用Powermock,查看此资源以获取更多输入https://dzone.com/articles/mock-final-class#mock-final-class

希望这会有所帮助!

祝你好运!