如何在Java中轻松模拟静态方法?
我正在使用Spring 2.5和JUnit 4.4
@Service
public class SomeServiceImpl implements SomeService {
public Object doSomething() {
Logger.getLogger(this.class); //a static method invoked.
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我不控制我的服务需要调用的静态方法,所以我不能将它重构为更可单元测试.我使用Log4J Logger作为示例,但真正的静态方法类似. 不能更改静态方法.
做Grails工作,我习惯使用类似的东西:
def mockedControl = mockFor(Logger)
mockControl.demand.static.getLogger{Class clazz-> … }
…
mockControl.verify()
Run Code Online (Sandbox Code Playgroud)
我如何在Java中做类似的事情?
我试图在Eclipse中使用junit在Eclipse Web Flow Project上运行我的第一个测试,并且还使用mvn测试从控制台运行,但是给了我同样的错误.
java.lang.NoClassDefFoundError:org/junit/Assume $ AssumptionViolatedException
这是我的java代码:
package org.uftwf.memberinquiry.text;
import junit.framework.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.uftwf.memberinquiry.model.MemberInquiryInformation;
import org.uftwf.memberinquiry.model.MemberRequest;
import org.uftwf.memberinquiry.service.MemberInquiryService;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:root-config.xml")
public class TestApp {
@Autowired
private MemberInquiryService service;
@Test
public void testgetMemeberRequestInformation() {
MemberRequest inMemberRequest = new MemberRequest();
MemberInquiryInformation testInfo = service.getMemeberRequestInformation(inMemberRequest);
inMemberRequest.setRequestor("cpilling04@aol.com.dev");
Assert.assertEquals(testInfo.getFirst_Name(), "Christine");
Assert.assertEquals(testInfo.getLast_Name(), "Pillings");
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的pox.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.uftwf.memberinquiry</groupId>
<artifactId>MemberInquiry</artifactId>
<name>Member Inquiry</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<developers>
<developer>
<id>jsmith</id> …Run Code Online (Sandbox Code Playgroud)