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
,因为纯单元测试不需要与SpringApplicationContext
中的组件交互。谢谢您的回复。我还是一样。我对问题进行了编辑以提供更多信息。我修改了我的答案,以解释您的用例不需要模拟。感谢您的时间和所有帮助!请参阅: