Exception Junit 5:断言失败错误:应为:<;正确>;但事实是:<;假>;

Exception Junit 5:断言失败错误:应为:<;正确>;但事实是:<;假>;,exception,junit,assert,junit5,Exception,Junit,Assert,Junit5,我试图在服务类中为下面的函数编写一个单元测试用例 @Service public class currencyHandler { public boolean isNoDecimal(String currency) { return "JPY".equalsIgnoreCase(currency) || "KRW".equalsIgnoreCase(currency); } } 以

我试图在服务类中为下面的函数编写一个单元测试用例

@Service
    public class currencyHandler {
        public boolean isNoDecimal(String currency) {
            return "JPY".equalsIgnoreCase(currency) || "KRW".equalsIgnoreCase(currency);
        }
    }
以下是单元案例:

    import org.junit.jupiter.api.Test;
    import static org.junit.jupiter.api.Assertions.assertFalse;
    import static org.junit.jupiter.api.Assertions.assertTrue;
    import org.springframework.test.context.junit.jupiter.SpringExtension;
    import org.svc.it.handlers;
    
    @ExtendWith(SpringExtension.class)
    public class CurrencyTests {
    
        @Mock
        CurrencyHandler currencyHandlerTest;
    
        @Test
        public void isNoCurrency() throws Exception {
            assertTrue(currencyHandlerTest.isNoCurrency("ABC"));
            assertTrue(currencyHandlerTest.isNoCurrency("XYZ"));
            assertFalse(currencyHandlerTest.isNoCurrency("BOGUS"));
            assertFalse(currencyHandlerTest.isNoCurrency(""));
            assertFalse(currencyHandlerTest.isNoCurrency(null));
        }
    }
下面是我在上面运行单元测试用例时的错误:

org.opentest4j.AssertionFailedError: expected: <true> but was: <false>
    at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:55)
    at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:40)
    at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:35)
    at org.junit.jupiter.api.Assertions.assertTrue(Assertions.java:162)

org.opentest4j.AssertionFailedError:应为:但为:
位于org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:55)
位于org.junit.jupiter.api.AssertTrue.AssertTrue(AssertTrue.java:40)
位于org.junit.jupiter.api.AssertTrue.AssertTrue(AssertTrue.java:35)
位于org.junit.jupiter.api.Assertions.assertTrue(Assertions.java:162)
我想我在@Mock object上做错了什么。
谢谢你的帮助。提前谢谢

要为
CurrencyHandler
类编写单元测试,必须针对该类的实例进行测试。您不能针对该类的mock实例进行测试

下面展示了如何编写这样的单元测试

package example;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

class CurrencyHandlerTests {

    private CurrencyHandler currencyHandler = new CurrencyHandler();

    @Test
    void isNoDecimal() {
        assertTrue(currencyHandler.isNoDecimal("JPY"));
        assertTrue(currencyHandler.isNoDecimal("KRW"));
        assertFalse(currencyHandler.isNoDecimal("BOGUS"));
        assertFalse(currencyHandler.isNoDecimal(""));
        assertFalse(currencyHandler.isNoDecimal(null));
    }
}
为了更好地理解这里的概念,我建议您阅读一些关于单元测试、mock和SUT(测试主题)的文章或书籍


此外,如果您正在编写上述纯单元测试,则无需注册
SpringExtension
,因为纯单元测试不需要与Spring
ApplicationContext

中的组件交互。谢谢您的回复。我还是一样。我对问题进行了编辑以提供更多信息。我修改了我的答案,以解释您的用例不需要模拟。感谢您的时间和所有帮助!请参阅: