今天在复习spring的时候遇到点小问题解决了并记录了下来,首先我们都应该熟悉Junit4测试的配置如下:
其中@RunWith表示的是用Junit4,而@ContextConfiguration表示配置文件的所在的位置,其中@ContextConfiguration如果没有设置值的话,会默认去从与当前测试类同级的目录中去找当前测试类名-context.xml配置文件。如:你的测试类名字为App.class,那么它就在同级目录中寻找App-context.xml文件如图:
但换成Junit5测试之后就变成了
package cn.s.register;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import cn.s.register.action.UserAction;
import cn.s.register.dao.IUserDAO;
import cn.s.register.domain.User;
@SpringJUnitConfig
public class App {
@Autowired
UserAction action;
@Test
void test1() throws Exception {
action.execute();
}
@Autowired
private IUserDAO dao;
@Test
void testName() throws Exception {
User u = new User();
u.setName("欧阳");
u.setAge(14);
dao.save(u);
}
}
只有一个@SpringJUnitConfig和@Test,那么又该去哪里寻找配置文件呢?
其实我们关联@SpringJUnitConfig的源代码发现里面包含了一个@ContextConfiguration,这个注解我们是不是很熟悉?就是在JUnit4中配置的寻找配置文件。而Junit5却只有一个@ContextConfiguration说明它默认也是去当前目录寻找测试名-context配置文件的
/**
* {@code @SpringJUnitConfig} is a <em>composed annotation</em> that combines
* {@link ExtendWith @ExtendWith(SpringExtension.class)} from JUnit Jupiter with
* {@link ContextConfiguration @ContextConfiguration} from the <em>Spring TestContext
* Framework</em>.
*
* @author Sam Brannen
* @since 5.0
* @see ExtendWith
* @see SpringExtension
* @see ContextConfiguration
* @see org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig
*/
@ExtendWith(SpringExtension.class)
@ContextConfiguration
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface SpringJUnitConfig {
----(因为篇幅问题- -)下面是SpringJUnitConfig的方法,大家可以自行去spring源码中查看
}
那当我们重新配置了@ContextConfiguration中的属性就可以自定义寻找配置文件的路径了
package cn.s.register;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import cn.s.register.action.UserAction;
import cn.s.register.dao.IUserDAO;
import cn.s.register.domain.User;
@SpringJUnitConfig
@ContextConfiguration("classpath:cn/s/register/App-context.xml")
public class App {
@Autowired
private IUserDAO dao;
@Test
void testName() throws Exception {
User u = new User();
u.setName("欧阳");
u.setAge(14);
dao.save(u);
}
}