有任何工具可以自动化模拟对象响应? (使用JMOCK,MOCKITO或EASY MOCK)

问题描述 投票:0回答:3

问题:是否有任何工具可以自动化固执或模拟对象响应(使用JMOCK,MOCKITO或EASE MOCK)? 我必须针对具有对亚马逊AWS服务(SQS/简单队列服务和DynamoDB)的方法编写单元测试。固执的模拟对象响应往往非常乏味,很难维持我。因此,我认为,如果我们使用Java代理(Over Cglib或Javassist)记录和重播Stubbed响应会很好。我考虑过自己实施这样的想法,但是我想检查是否有人实施了这样的想法。

easymock在过去做到了这一点,但是我们发现随着代码的变化,这种测试往往很脆弱。我的经验是,如果在测试中维持存根是乏味的,那么这是关于应该聆听的测试代码设计的线索。那里可能应该有更多较小的对象。
mocking mockito easymock powermock
3个回答
1
投票
我建议不要完全这样做。嘲笑您不拥有的图书馆只是在要求麻烦(因为您已经看到),并且仅确认您正在以您认为应该的方式与图书馆进行互动。

如果您的代码与SQS/DynamoDB进行交互,然后编写实际使用SQS和DynamoDB的集成测试 - 它们将为您提供比单位测试更高的置信度,并且不会变得脆弱。 DynamoDB还具有内存本地实例,您可以为此目的旋转


1
投票
”(双向模拟),该工具具有两种模式。在记录模式下,IT将带有返回值或异常的方法记录到JSON格式的资源文件中。在重播模式下,它设置了方法调用并在启动时从资源文件中解答,并重播回报或投掷的答案。请参阅此示例,其中我记录了Java对象的公共方法响应并从JSON文件中重新重播它们。 您不仅可以针对Amazon AWS SDK对象,还可以使用此工具来对付各种依赖项,还可以使用Hashmap,arrayList,bytebuffer等JDK对象。

public class BimockTest { private Mode mode = Mode.Replay; private PojoMapper pojoMapper = new PojoMapper(new BimockModule()); private Bimock bimock = new Bimock(pojoMapper); @Test public void testRecordAndReplayMap() throws IOException { val map = bimock.of(new HashMap<String, Integer>(), mode, new File("src/test/resources/test-record-and-replay-map.json")); assertThat(map.put("abc", 3), equalTo(null)); assertThat(map.size(), equalTo(1)); assertThat(map.get("abc"), equalTo(3)); } @Test public void testRecordAndReplayList() { List<Long> list = new ArrayList<Long>(); list = bimock.of(list, mode, new File("src/test/resources/test-record-and-replay-list.json")); try { assertThat(list.remove(-1), nullValue()); fail(); } catch (ArrayIndexOutOfBoundsException e) { assertThat(e.getMessage(), equalTo("-1")); } assertThat(list.add(100L), equalTo(true)); assertThat(list.toArray(new Long[1]), equalTo(new Long[] { 100L })); } }


0
投票

可以记录几乎所有非最终Java对象,包括投掷行为以及对参数进行的修改。

请检查一下!

https://github.com/ryucc/rere

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.