首先,我定義了一個類,比如說Robot.public class Robot { private Vision vision; public Object recognizeObject(List<List<Integer>> frames) { vision = new Vision(); return vision.recognize(frames); }}Class ofRobot有幾個依賴項,其中之一是Vision.public class Vision { public Object recognize(List<List<Integer>> frames) { // do magic stuff, but return dummy stuff return null; }}然后在測試類中,我簡單地測試了recognize().@RunWith(JMockit.class)public class RobotTest { @Test public void recognizeObjectWithMocked(@Mocked final Vision vision) { List<List<Integer>> frames = new ArrayList<>(); vision.recognize(frames); new Verifications() {{ vision.recognize((List<List<Integer>>) any); times = 1; }}; } @Test public void recognizeObjectWithInjectable(@Injectable final Vision vision) { List<List<Integer>> frames = new ArrayList<>(); vision.recognize(frames); new Verifications() {{ vision.recognize((List<List<Integer>>) any); times = 1; }}; } @Test public void recognizeObjectWithCapturing(@Capturing final Vision vision) { List<List<Integer>> frames = new ArrayList<>(); vision.recognize(frames); new Verifications() {{ vision.recognize((List<List<Integer>>) any); times = 1; }}; }}基于這些測試,我認為@Mocked、@Injectable和@Capturing可以互換使用。那是對的嗎?如果答案是否定的,那么有沒有一種情況,只有 //@Mocked是可能的,而不能被其他的?@Injectable@Capturing
1 回答
莫回?zé)o
TA貢獻1865條經(jīng)驗 獲得超7個贊
@Injectable模擬單個實例(例如測試方法的參數(shù))。并非在測試上下文中使用的每個實例。@Mocked將在測試上下文中創(chuàng)建的每個實例上模擬所有類方法和構(gòu)造函數(shù)。@Capturing與 基本相同@Mocked,但它將模擬擴展到注釋類型的每個子類型(方便?。?。
的另一個區(qū)別@Injectable是,只有標有此注釋的字段才會考慮在@Tested實例內(nèi)注入。
區(qū)別現(xiàn)在應(yīng)該很清楚了。
添加回答
舉報
0/150
提交
取消
