Как сделать тест Junit еще филиал, если
Я пытаюсь сделать тест Junit для метода.
public List<QuestionBank> getQuestionBankDetails(){
if(stubbed){
return (List<QuestionBank>) BeanPopulateUtils.getPopulateBeanValues(new QuestionBank(), true);
}else{
throw new NotImplementedException("Non-stubbed SOAP call not implemented");
}
}
Это мой случай с Junit:
@Test
public void testGetQuestionBankDetails(){
List<QuestionBank> questionBankList = questionBankFacade.getQuestionBankDetails();
int i=1;
for(QuestionBank questionBank : questionBankList){
assertEquals("Name "+i+"", questionBank.getName());
assertEquals("Description "+i+"", questionBank.getDescription());
assertEquals("Pubished Status "+i+" ", questionBank.getPubishedStatus());
assertEquals("Questions "+i+"", questionBank.getQuestions());
i++;
}
}
Тестовый пример Junit становится успешным, но я хочу спросить, как я буду тестировать в другом случае
Throw new NotImplementedException("Non-stubbed SOAP call not implemented");
4 ответа
Попробуйте использовать, если возможно, интерфейс, чтобы различать заглушку и реализацию по умолчанию. И предпочтительно использовать логику конфигурации, чтобы "внедрить" правильное поведение, или Factory, чтобы сгенерировать запрошенный экземпляр класса.
Смотрите пример, как это:
BankDetails.class
package example;
import java.util.List;
public interface BankDetails {
List<QuestionBank> getQuestionBankDetails();
}
BankDetailsDefaultImpl.class
package example;
import java.util.List;
public class BankDetailsDefaultImpl implements BankDetails {
@Override
public List<QuestionBank> getQuestionBankDetails() {
return (List<QuestionBank>) BeanPopulateUtils.getPopulateBeanValues(new QuestionBank(), true);
}
}
BankDetailsStubbedImpl.class
package example;
import java.util.List;
public class BankDetailsStubbedImpl implements BankDetails {
@Override
public List<QuestionBank> getQuestionBankDetails() {
throw new NotImplementedException("Non-stubbed SOAP call not implemented");
}
}
QuestionBankFacade.class
package example;
public class QuestionBankFacade {
private final BankDetails bankDetails;
public QuestionBankFacade(final BankDetails bankDetails) {
this.bankDetails = bankDetails;
}
public BankDetails getQuestionBankDetails() {
return this.getQuestionBankDetails();
}
}
И, наконец, тест JUnit:
QuestionBankFacadeTest.class
package example;
import static org.junit.Assert.*;
import java.util.List;
import org.apache.commons.lang.NotImplementedException;
import org.junit.Test;
public class QuestionBankFacadeTest {
@Test
public void testDefaultImplementation() {
final QuestionBankFacade questionBankFacade = new QuestionBankFacade(new BankDetailsDefaultImpl());
List<QuestionBank> questionBankList = questionBankFacade.getQuestionBankDetails();
//Test case that you already have
// for(QuestionBank questionBank : questionBankList){
// assertEquals("Name "+i+"", questionBank.getName());
// assertEquals("Description "+i+"", questionBank.getDescription());
// assertEquals("Pubished Status "+i+" ", questionBank.getPubishedStatus());
// assertEquals("Questions "+i+"", questionBank.getQuestions());
// i++;
// }
}
@Test(expected = NotImplementedException.class)
public void testStubbedImplementation() {
final QuestionBankFacade questionBankFacade = new QuestionBankFacade(new BankDetailsStubbedImpl());
questionBankFacade.getQuestionBankDetails();
}
}
Вам нужно написать отдельный метод тестирования, который будет проверять путь кода условия else.
Если stubbed
переменная класса, создайте объект и установите для переменной значение false. затем вызовите функцию getQuestionBankDetails();
, Таким образом, вы можете проверить остальную часть
Из-за отсутствия кода я предполагаю, что ваш QuestionBankFacade
класс выглядит так:
private boolean stubbed;
public boolean isStubbed() {
return stubbed;
}
public void setIsStubbed(boolean isStubbed) {
this.stubbed = isStubbed;
}
public List<QuestionBank> getQuestionBankDetails() {
if (stubbed) {
return (List<QuestionBank>) BeanPopulateUtils.getPopulateBeanValues(new QuestionBank(), true);
}
throw new NotImplementedException("Non-stubbed SOAP call not implemented");
}
Чем вы можете написать такой тест:
@Test(expected=NotImplementedException.class)
public void getQuestionBankDetailsThrowsAnExceptionIfStubbed() {
boolean memento = questionBankFacade.isStubbed();
questionBankFacade.setIsStubbed(false);
try {
questionBankFacade.getQuestionBankDetails();
} finally {
questionBankFacade.setIsStubbed(memento);
}
}