Java 如何进行if的junittestelse分支
我正在尝试对该方法进行Junit测试Java 如何进行if的junittestelse分支,java,junit,junit4,junit3,Java,Junit,Junit4,Junit3,我正在尝试对该方法进行Junit测试 public List<QuestionBank> getQuestionBankDetails(){ if(stubbed){ return (List<QuestionBank>) BeanPopulateUtils.getPopulateBeanValues(new QuestionBank(), true); }else{
public List<QuestionBank> getQuestionBankDetails(){
if(stubbed){
return (List<QuestionBank>) BeanPopulateUtils.getPopulateBeanValues(new QuestionBank(), true);
}else{
throw new NotImplementedException("Non-stubbed SOAP call not implemented");
}
}
如果stubbed是类变量,请创建一个对象并将该变量设置为false。然后调用函数
getQuestionBankDetails()代码>。这样,您就可以检查else部分,因为缺少代码。我假设您的类如下所示:
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);
}
}
您需要编写一个单独的测试方法来测试else条件代码路径。如果可能,尝试使用接口来区分存根实现和默认实现。最好使用配置逻辑来“注入”正确的行为,或者使用工厂来生成请求的类实例
请参见以下示例:
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);
}
}
银行详情.类别
package example;
import java.util.List;
public interface BankDetails {
List<QuestionBank> getQuestionBankDetails();
}
最后是JUnit测试:
问题库FacadeTest.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();
}
}
包示例;
导入静态org.junit.Assert.*;
导入java.util.List;
导入org.apache.commons.lang.NotImplementedException;
导入org.junit.Test;
公开课试题库FACADETEST{
@试验
public void testDefaultImplementation(){
最终问题BankFacade QuestionBankFacade=新问题BankFacade(新的BankDetailsDefaultImpl());
List questionBankList=questionBankFacade.getQuestionBankDetails();
//您已经拥有的测试用例
//用于(问题库问题库:问题库列表){
//assertEquals(“Name”+i+”,questionBank.getName());
//assertEquals(“Description”+i+”,questionBank.getDescription());
//assertEquals(“发布状态”+i+”,questionBank.getPubishedStatus());
//assertEquals(“问题“+i+”,问句库.getQuestions());
//i++;
// }
}
@测试(预期=NotImplementedException.class)
公共void testStubbedImplementation(){
final QuestionBankFacade QuestionBankFacade=new QuestionBankFacade(new BankDetailsStubbedImpl());
questionBankFacade.getQuestionBankDetails();
}
}
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");
}
}
package example;
public class QuestionBankFacade {
private final BankDetails bankDetails;
public QuestionBankFacade(final BankDetails bankDetails) {
this.bankDetails = bankDetails;
}
public BankDetails getQuestionBankDetails() {
return this.getQuestionBankDetails();
}
}
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();
}
}