关于SpringJunit5测试设置配置文件路径的小问题

今天在复习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);
}
}

发布了6 篇原创文章 · 获赞 3 · 访问量 793

猜你喜欢

转载自blog.csdn.net/SmileLucki/article/details/105264188