0

バッキング Bean にあるメソッドの jUnit テスト ケースを書きたいのですが、Bean のコンストラクターに「facesContext」メソッドへの呼び出しがいくつかあるという問題があります。通話はこんな感じ

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().
  put(
    BEAN_NAME,
    BEAN_OBJECT
  );

テストケースを書くと、「NullPointerException」がスローされます。facesContext が初期化されていないことが原因であることはわかっています。

たとえば、このようなメソッドがある場合

public String disableFields() throws ApplicationException
{
  logger.info(empId);
  logger.info(relationShip.getRelationshipName());
  if(relationShip.getRelationshipName().equalsIgnoreCase("select"))
  {
    errorMessage="Please select relationship";
    Utils.addMessage(errorMessage, FacesMessage.SEVERITY_ERROR);
    return null;
  }


  showEmpName=true;// boolean value
  return null;
}

可能であれば、jUnitテストケースのコードを教えてください......

これらのタイプのメソッドのjUnitsテストケースを作成する方法を提案してください....私はjsf 1.2を使用しています..

前もって感謝します

4

1 に答える 1

0

ここで説明されているように、静的メソッドをモックするには PowerMockito の機能が必要です: https://code.google.com/p/powermock/wiki/MockStatic

これが実際の例です:

import org.hamcrest.core.IsEqual;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import javax.faces.application.FacesMessage;

@RunWith(PowerMockRunner.class)
@PrepareForTest(Utils.class)
public class AppTest {

  public static final String PLEASE_SELECT_RELATIONSHIP = "Please select relationship";

  @Test
  public void testDisableFields() throws Exception {

    PowerMockito.mockStatic(Utils.class);

    Relationship relationShip = Mockito.mock(Relationship.class);
    App app = new App(1, relationShip);

    Mockito.when(relationShip.getRelationshipName()).thenReturn("SeLeCt");


    app.disableFields();

    Assert.assertThat(app.getErrorMessage(), IsEqual.equalTo(PLEASE_SELECT_RELATIONSHIP));

    PowerMockito.verifyStatic(Mockito.times(1));
    Utils.addMessage(PLEASE_SELECT_RELATIONSHIP, FacesMessage.SEVERITY_ERROR);
  }

}
于 2013-05-29T08:45:30.173 に答える