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();
}
}
「isLoggedIn」というコードはどこにありますか? – john16384
isLoggedIn()のコードが追加されました – Dos
私はJMockitに慣れていません。 'session.isLoggedIn()'がtrueを返すようにするにはどうすればよいですか? – Arkadiy