捆绑放置并获得单元测试

时间:2017-02-22 23:15:00

标签: android unit-testing testing junit mockito

我正在尝试进行测试,以验证是否已在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.

1 个答案:

答案 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));
    }
}