こんにちは@allとあなたの応答をありがとう。これは上の問題の回避策として見つけた解決策についてすばやく頭を上げています。通信チームのテストクラスを作成するときにJavaクラスを変更できない場合、これは同じような状況に直面した皆さんにとってうまくいきたいと思います。
public class TestHalfNumber {
private HalfNumber classUnderTest;
Map<String,Object> bindingsMap;
protected Map<String, String> captured;
@Mock
protected Resource resource;
@Mock
protected ResourceResolver resourceResolver;
@Mock
protected SlingHttpServletRequest sServletReq;
// ---------------------------------------------------------------------------
/**
* @param object
* of type WCMUsePojo. This object cannot be null.
* @param map
* containing properties that needs to be initialized with
* WCMUsePojo
*/
// ---------------------------------------------------------------------------
public void init(WCMUsePojo obj, Map<String, Object> map) {
Map<String, Object> staticMap = new HashMap<String, Object>();
staticMap.put("resource", resource);
staticMap.put("request", sServletReq);
if (map != null)
staticMap.putAll(map);
if (obj != null)
obj.init(new SimpleBindings(staticMap));
else
throw new IllegalArgumentException("Subclass object is null ");
}
@Before
public void setUp()
{
MockitoAnnotations.initMocks(this);
classUnderTest = new HalfNumber();
when(sServletReq.getResourceResolver()).thenReturn(resourceResolver);
}
// ---------------------------------------------------------------------------
/**
* Test case for GetHalfValue
*/
// ---------------------------------------------------------------------------
@Test
public void testGetHalfValue() throws Exception{
int inputValue = 5;
int expected = 3;
bindingsMap = new HashMap<String,Object>();
//Here is where we change the 4 by a 5 or any other value to test.
bindingsMap.put("value",inputValue);
init(classUnderTest,bindingsMap);
int result = classUnderTest.getHalfValue();
Assert.assertEquals(expected,result);
}
}
出典
2016-08-13 00:38:51
GRP
通常の実行で 'value'はどのように設定されますか? – nhouser9
こんにちは@nhouser9 !!!ここでの値は、トレースすることが困難な他の操作から定義されます。私はこのクラスが狂っていることを知っていますが、私はそれらを書いていないので、私もそれらを変更することはできません。しかし、この値の数は任意の整数にすることができます。 – GRP
このクラスは、リフレクションを使用してフィールドを設定し、個々のメソッドをテストしない限り、テストできません。しかし、それは変です。クラスの振る舞い全体をテストすることをお勧めしますが、複数の懸念事項を念頭に置いて書かれている場合、これは難しく、正しいことをするのはおそらく不可能です(テスト可能ではあるがひどく醜い)。 – mszymborski