Tôi đang sử dụng private static thức lĩnh vực Logger trong lớp học của tôi và tôi muốn LOGGER.isInfoEnabled() phương pháp để trở sai. Làm thế nào tôi có thể thử các lĩnh vực thức tĩnh bằng cách sử dụng Mockito hoặc jMockitMock private static thức lĩnh vực sử dụng Mockito hoặc Jmockit
lớp của tôi là:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Class1 {
private static final Logger LOGGER = LoggerFactory.getLogger(Class1.class);
public boolean demoMethod() {
System.out.println("Demo started");
if (LOGGER.isInfoEnabled()) {
System.out.println("@@@@@@@@@@@@@@ ------- info is enabled");
} else {
System.out.println("info is disabled");
}
return LOGGER.isInfoEnabled();
}
}
và junit của nó là:
import mockit.Mocked;
import mockit.NonStrictExpectations;
import org.mockito.InjectMocks;
import org.mockito.MockitoAnnotations;
import org.slf4j.Logger;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
import com.source.Class1;
public class MyTest {
@InjectMocks
Class1 cls1;
@BeforeMethod
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
@Test
public void test(@Mocked final Logger LOGGER) {
new NonStrictExpectations() {
{
LOGGER.isInfoEnabled();
result = false;
}
};
assertFalse(cls1.demoMethod());
}
}
khi tôi chạy nó kết quả là:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.test.MyTest
Configuring TestNG with: TestNG652Configurator
Demo started
@@@@@@@@@@@@@@ ------- info is enabled
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.9 sec <<< FAILURE! - in com.test.MyTest
test(com.test.MyTest) Time elapsed: 0.168 sec <<< FAILURE!
java.lang.AssertionError: expected [false] but found [true]
at com.test.MyTest.test(MyTest.java:35)
Results :
Failed tests:
MyTest.test:35 expected [false] but found [true]
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.899s
[INFO] Finished at: Mon Jun 08 12:35:36 IST 2015
[INFO] Final Memory: 16M/166M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test (default-test) on project JMockDemo: The
re are test failures.
[ERROR]
[ERROR] Please refer to D:\perfoce_code\workspace_kepler\JMockDemo\target\surefire-reports for the individual test results.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
Tôi mới dùng jmockit và tôi muốn trường hợp trên junit của mình chạy thành công. Và tôi phải sử dụng JMockit hoặc mockito, không thể sử dụng Powermockito. Xin vui lòng giúp đỡ.
Bạn có thể tạo một phương pháp setter cho các thành phần và thiết lập một logger giả trong khi thử nghiệm. –
Có nó đang làm việc theo cách đó, nhưng tôi phải làm cho logger không phải cuối cùng và cũng thêm một phương thức setter. Không có cách nào để làm điều đó mà không thay đổi lớp thực tế. –
Chỉ cần thay đổi '@Mocked Logger' thành' @Capturing Logger', nó sẽ hoạt động. –