2017-03-01 11 views
0

私は自分のBeanをコンポーネント自体としてテストしようとしています。私がテストしたいメソッドが正しく実行されるように。したがって、私はJMockitとの依存関係を嘲笑しています。私は2つのテストを書いています.1つはif条件を真にするためのメソッドで、すぐに終了しnullを返します。この条件の下でコードを実行してもnullを返す2つ目のテストです。しかし、私のコードカバレッジツール(JaCoCo)はif条件が実行され、以下のコードではないことを示しています。 セッションはスーパークラスÀbstractBeanのフィールドです。方法isLoggedIn()session.isLoggedIn()を呼び出し、AbstractBeanで定義されています。馴染みのPを有する人のため依存関係とコードカバレッジツールが実行されていないコードを表示しています

TrendBean

@Named(value = "trendBean") 
@ViewScoped 
@SuppressWarnings("deprecation") 
public class TrendBean extends AbstractBean implements Serializable { 

private static final long serialVersionUID = -310401000218411384L; 

private static final Logger logger = Logger.getLogger(TrendBean.class); 

private ChartPoint point; 

private List<ChartPoint> points; 

@Inject 
private ITrendManager manager; 


public String addChartPoint() { 
    if (!isLoggedIn()) { 
     return null; //only this block is executed 
    } 
    assertNotNull(point); 
    final User user = getSession().getUser(); 
    manager.addPointToUser(user, point); 
    FacesContext.getCurrentInstance().addMessage(
      null, 
      new FacesMessage(FacesMessage.SEVERITY_INFO, 
        getTranslation("pointAdded"), "")); 
    init(); 
    return null; 

    } 
} 

TrendBeanTest

public class TrendBeanTest { 

@Tested 
TrendBean trendBean; 
@Injectable 
LoginBean loginBean; 
@Injectable 
Session session; 
@Injectable 
ITrendManager manager; 
@Injectable 
IUserManager userManager; 

@Test 
public void testAddChartPoint() { 

    new NonStrictExpectations() { 

     { 
      session.isLoggedIn(); 
      result = true; 
      session.getUser(); 
      result = (User) any; 
      manager.addPointToUser((User) any, (ChartPoint) any); 
     }; 
    }; 

    Deencapsulation.setField(trendBean, "point", new ChartPoint()); 

    assertEquals(null, trendBean.addChartPoint()); 

} 

@Test 
public void testAddChartPointNotLoggedIn() { 

    new Expectations() { 
     { 
      manager.addPointToUser((User) any, (ChartPoint) any); 
      times = 0; 
     }; 
    }; 

    Session s = new Session(); 
    s.setUser(null); 

    Deencapsulation.setField(trendBean, "session", s); 

    assertEquals(null, trendBean.addChartPoint()); 

    } 
} 

AbstractBean

public abstract class AbstractBean { 

private static final Logger logger = Logger.getLogger(AbstractBean.class); 

@Inject 
private Session session; 

public boolean isLoggedIn() { 
    return session.isLoggedIn(); 
} 
} 
+0

「isLoggedIn」というコードはどこにありますか? – john16384

+0

isLoggedIn()のコードが追加されました – Dos

+0

私はJMockitに慣れていません。 'session.isLoggedIn()'がtrueを返すようにするにはどうすればよいですか? – Arkadiy

答えて

0

厄介なステートメント

session.isLoggedIn(); 
result = true; 

の期待ブロックでは答えがありました。私は新しい問題に直面していますが、私は新しい質問をするつもりです。

関連する問題