![](/img/trans.png)
[英]How to populate database only once before @Test methods in spring test?
[英]@after @before used only once, several @test
我有一个发送电子邮件的测试:一个发送一个简单的电子邮件,第二个发送带附件的电子邮件,第三个发送和电子邮件与标签html:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"file:src/main/webapp/WEB-INF/applicationContext.xml",
"file:src/main/webapp/WEB-INF/spring-mail.xml",
"classpath:test-applicationContext.xml" })
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
public class MailMailTest extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
MailMail mailMail;
@Value("${mail.mail}")
private String fromEmail;
@Autowired
private MessageSource messages;
private final static Logger logger = Logger.getLogger(MailMailTest.class);
@Test
public void testSendHTMLMail() {
logger.info("Ini testSendHTMLMail");
mailMail.sendHTMLMail(
fromEmail,
"blah@gmail.com",
"Prueba envio correo con html",
"Esto es una prueba <br>"
+ this.messages.getMessage(
"email.requestPasswordRecovery.body",null, "Default",null));
logger.info("End testSendHTMLMail");
}
@Before
public void setUp() {
logger.info("** SetUp **");
try {
String fileName = "c:/archivo_prueba.txt";
// File f = new File(fileName);
FileWriter fw;
// FileWriter fichero = new FileWriter("c:/prueba.txt",true);
fw = new FileWriter(fileName, true);
PrintWriter pw = new PrintWriter(fw);
pw.println("esto es una prueba");
pw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testSendMail() {
logger.info("Inicio prueba testSendMail");
mailMail.sendMail(fromEmail, "blah@gmail.com",
"Prueba envio correo con attachment", "Esto es una prueba",
"c:/archivo_prueba.txt");
logger.info("Fin prueba testSendMail");
}
@After
public void tearDown() {
logger.info("** tearDown **");
File f = new File("c:/archivo_prueba.txt");
if (f.delete())
logger.info("El fichero ha sido borrado satisfactoriamente");
else
logger.error("El fichero no puede ser borrado");
}
@Test
public void testSendSimpleMail() {
logger.info("Inicio prueba testSendSimpleMail");
mailMail.sendSimpleMail(fromEmail, "balh@gmail.com",
"Prueba envio correo simple", "Esto es una prueba");
logger.info("Fin prueba testSendSimpleMail");
}
}
在发送带附件的电子邮件的情况下,我需要创建一个文件,这就是我需要的原因:@before用于创建文件,@ after用于删除它。 当我运行我的测试@after和@before被调用3次。 是否可以只为方法testSendMail()调用@before和@after?
最好将JUnit Rule
用于此任务,特别是TemporaryFolder
规则:
@Rule
public TemporaryFolder temp = new TemporaryFolder();
@Test
public void testSendMail() {
File attachment = temp.newFile("archivo_prueba.txt");
... // Write test data to the file
mailMail.sendMail(fromEmail, "blah@gmail.com",
"Prueba envio correo con attachment", "Esto es una prueba",
attachment.getAbsolutePath());
}
您可以使用@BeforeClass和@AfterClass只运行一次设置和拆卸方法(在运行所有测试之前,以及运行所有测试之后)。
至于根据特定的单个单元测试有选择地运行@Before和@After方法,我认为这是不可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.