Reputation: 840
I am trying to do Junit test for the method.
public List<QuestionBank> getQuestionBankDetails(){
if(stubbed){
return (List<QuestionBank>) BeanPopulateUtils.getPopulateBeanValues(new QuestionBank(), true);
}else{
throw new NotImplementedException("Non-stubbed SOAP call not implemented");
}
}
This is my Junit case:
@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++;
}
}
The Junit test case is getting success but the thing i want to ask is how i will test in 'else' case
Throw new NotImplementedException("Non-stubbed SOAP call not implemented");
Upvotes: 1
Views: 802
Reputation: 847
Try to use if it possible interface to differentiate between stubbed and default implementation. And use preferably an configuration logic to "inject" correct behavior, or Factory to generate requested class instance.
See example like this:
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();
}
}
And finally the JUnit test:
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();
}
}
Upvotes: 2
Reputation: 187
You need to write a separate test method which will tests the else condition code path.
Upvotes: 0
Reputation: 8068
Due to missing code I assume your QuestionBankFacade
class looks like this:
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");
}
Than you may write a test like this:
@Test(expected=NotImplementedException.class)
public void getQuestionBankDetailsThrowsAnExceptionIfStubbed() {
boolean memento = questionBankFacade.isStubbed();
questionBankFacade.setIsStubbed(false);
try {
questionBankFacade.getQuestionBankDetails();
} finally {
questionBankFacade.setIsStubbed(memento);
}
}
Upvotes: 0
Reputation: 8101
if stubbed
is a class variable, Create an object and set the variable to false. then call the function getQuestionBankDetails();
. That way you can check the else part
Upvotes: 0