我正在尝试进行测试,以验证是否已在Bundle
上成功写入值。
这是一个简单的类,它将在Bundle
:
public class Coder {
public void serialize(Bundle bundle, String key, boolean value) {
bundle.putBoolean(key, value);
}
}
我想测试serialize
方法,在使用Bundle
进行方法调用后检查bundle.getBoolean(String)
作为参数传递。
我尝试使用ArgumentCaptor
但没有成功:
Coder coder = mock(Coder.class);
Bundle bundle = mock(Bundle.class);
ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
coder.serialize(bundle, key, expectedValue);
verify(coder).serialize(bundleCaptor.capture(), eq(key), eq(expectedValue));
Bundle mockBundle = bundleCaptor.getValue();
assertEquals(expectedValue, mockBundle.getBoolean(key));
但mockBundle.getBoolean(key)
会返回false
。
如果我尝试不嘲笑Bundle
,我会在mockBundle.getBoolean(key)
处获得此例外:
java.lang.RuntimeException: Method getBoolean in android.os.BaseBundle not mocked.
答案 0 :(得分:2)
我认为你过于复杂了。
public class TestCoder {
@Test
public void testSerialize() {
Coder coder = new Coder();
Bundle bundle = new Bundle();
coder.serialize(bundle);
assertEquals(expectedValue, bundle.getBoolean(key));
}
}