如何使用 JUnit 在 Java 中测试布尔值 return 类型的方法
How to test a Method with a Boolean return type in Java with JUnit
我正在编写一个 JUnit
测试用例,用于获取线路和分支覆盖的方法。被测方法调用另一个 Boolean
类型的方法,我无法涵盖该部分,因为在 Cobertura
报告中,以下行显示为红色。
if (getLoggingHandler().isGeneralDebugEnabled())
正在测试的方法:
public void logMethodEndDebug(ILoggable l, String c, String m, String msg, Object... args) {
if (getLoggingHandler().isGeneralDebugEnabled()) {
String cf = ComponentUtils.createControlFrag(l, c);
StringBuilder sb = new StringBuilder(cf);
sb.append(m + StringConstants.SPACE + LogConstants.END);
sb.append(StringConstants.BRACE_OPEN + String.format(msg, args) + StringConstants.BRACE_CLOSE);
getLoggingHandler().handleGeneralDebug(sb.toString());
}
}
JUnit 测试:
@Test
public void testLogMethodStartDebug() throws Exception {
String var1 = "var1";
String var2 = "var2";
String var3 = "var3";
Object[] object = new Object[] {"var4"};
BaseComponent baseComponent = new BaseComponent();
baseComponent.setLoggingHandler(new TestLoggingHandler());
ILoggable loggable = new ServiceContext();
baseComponent.logMethodEndDebug(loggable, var1, var2, var3, object);
assertTrue(baseComponent.getLoggingHandler().isGeneralDebugEnabled());
}
有什么方法可以覆盖这个getLoggingHandler().isGeneralDebugEnabled()
?
谢谢,
您可以定义一个 mock,然后在调用 getLoggingHandler().isGeneralDebugEnabled()
时将值强制为 return true
代码如下所示:
@Mock
private TestLoggingHandler mockLoggingHandler;
...
@Test
public void testLogMethodStartDebug() throws Exception {
String var1 = "var1";
String var2 = "var2";
String var3 = "var3";
Object[] object = new Object[] {"var4"};
when(mockLoggingHandler.isGeneralDebugEnabled()).thenReturn(true);
BaseComponent baseComponent = new BaseComponent();
baseComponent.setLoggingHandler(mockLoggingHandler);
ILoggable loggable = new ServiceContext();
baseComponent.logMethodEndDebug(loggable, var1, var2, var3, object);
assertTrue(baseComponent.getLoggingHandler().isGeneralDebugEnabled());
}
或者,如果 generalDebugEnabled
的 setter 可用,您可以执行以下操作:
@Test
public void testLogMethodStartDebug() throws Exception {
String var1 = "var1";
String var2 = "var2";
String var3 = "var3";
Object[] object = new Object[] {"var4"};
BaseComponent baseComponent = new BaseComponent();
baseComponent.setLoggingHandler(new TestLoggingHandler());
baseComponent.getLoggingHandler().setGeneralDebugEnabled(true);
ILoggable loggable = new ServiceContext();
baseComponent.logMethodEndDebug(loggable, var1, var2, var3, object);
assertTrue(baseComponent.getLoggingHandler().isGeneralDebugEnabled());
}
我正在编写一个 JUnit
测试用例,用于获取线路和分支覆盖的方法。被测方法调用另一个 Boolean
类型的方法,我无法涵盖该部分,因为在 Cobertura
报告中,以下行显示为红色。
if (getLoggingHandler().isGeneralDebugEnabled())
正在测试的方法:
public void logMethodEndDebug(ILoggable l, String c, String m, String msg, Object... args) {
if (getLoggingHandler().isGeneralDebugEnabled()) {
String cf = ComponentUtils.createControlFrag(l, c);
StringBuilder sb = new StringBuilder(cf);
sb.append(m + StringConstants.SPACE + LogConstants.END);
sb.append(StringConstants.BRACE_OPEN + String.format(msg, args) + StringConstants.BRACE_CLOSE);
getLoggingHandler().handleGeneralDebug(sb.toString());
}
}
JUnit 测试:
@Test
public void testLogMethodStartDebug() throws Exception {
String var1 = "var1";
String var2 = "var2";
String var3 = "var3";
Object[] object = new Object[] {"var4"};
BaseComponent baseComponent = new BaseComponent();
baseComponent.setLoggingHandler(new TestLoggingHandler());
ILoggable loggable = new ServiceContext();
baseComponent.logMethodEndDebug(loggable, var1, var2, var3, object);
assertTrue(baseComponent.getLoggingHandler().isGeneralDebugEnabled());
}
有什么方法可以覆盖这个getLoggingHandler().isGeneralDebugEnabled()
?
谢谢,
您可以定义一个 mock,然后在调用 getLoggingHandler().isGeneralDebugEnabled()
时将值强制为 return true
代码如下所示:
@Mock
private TestLoggingHandler mockLoggingHandler;
...
@Test
public void testLogMethodStartDebug() throws Exception {
String var1 = "var1";
String var2 = "var2";
String var3 = "var3";
Object[] object = new Object[] {"var4"};
when(mockLoggingHandler.isGeneralDebugEnabled()).thenReturn(true);
BaseComponent baseComponent = new BaseComponent();
baseComponent.setLoggingHandler(mockLoggingHandler);
ILoggable loggable = new ServiceContext();
baseComponent.logMethodEndDebug(loggable, var1, var2, var3, object);
assertTrue(baseComponent.getLoggingHandler().isGeneralDebugEnabled());
}
或者,如果 generalDebugEnabled
的 setter 可用,您可以执行以下操作:
@Test
public void testLogMethodStartDebug() throws Exception {
String var1 = "var1";
String var2 = "var2";
String var3 = "var3";
Object[] object = new Object[] {"var4"};
BaseComponent baseComponent = new BaseComponent();
baseComponent.setLoggingHandler(new TestLoggingHandler());
baseComponent.getLoggingHandler().setGeneralDebugEnabled(true);
ILoggable loggable = new ServiceContext();
baseComponent.logMethodEndDebug(loggable, var1, var2, var3, object);
assertTrue(baseComponent.getLoggingHandler().isGeneralDebugEnabled());
}