- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试测试聚合并想断言夹具之外的事件,甚至可能使用 Hamcrest 进行评估?
使用时间戳的例子
fixture.given()
.when(new UserCreateCommand("1","test@bob.com"))
.expectEvents(new UserCreatedEvent("1","test@bob.com");
夹具让我可以轻松地测试相等性,例如该命令准确地产生了这个事件,如果我想说引入一个事件创建时间的时间戳,这并不容易
fixture.given()
.when(new UserCreateCommand("1","test@bob.com"))
.expectEvents(new UserCreatedEvent("1","test@bob.com", LocalDateTime.now());
这种期望永远不会起作用,因为 LocalDateTime.now() 永远不会精确等于聚合中生成的时间戳。
我可以简单地将时间戳包含在命令有效负载中,但我更喜欢在聚合内部处理以确保以一致的方式生成此时间戳。
有没有办法从夹具中检索事件以独立于夹具进行断言,例如
UserCreatedEvent uce = fixture.given()
.when(new UserCreateCommand("1","test@bob.com"))
.extractEvent(UserCreatedEvent.class)
这将允许我使用其他断言库,例如 hamcrest:
例如
assertThat(uce.getCreatedAt(), is(greaterThanOrEqualto(LocalDateTime.now().minusSeconds(1);
最佳答案
合理的问题@vcetinick!
您实际上应该能够将匹配器与 Axon 的聚合测试装置结合使用。 AggregateTestFixture
的结果验证部分提供 expectEventsMatching(Matcher<? extends List<? super EventMessage<?>>> matcher)
方法。您可以找到此 here 的代码顺便说一下。
在此 Axon 框架之上提供了一组合理的匹配器,您可以将其用于一般的消息,分组在实用程序类 Matchers
下。 (你可以找到 here )。
有了这一切,你应该能够做这样的事情:
@Test
void sampleTest() {
FixtureConfiguration<SampleAggregate> fixture =
new AggregateTestFixture<>(SampleAggregate.class);
fixture.givenNoPriorActivity()
.when(new UserCreateCommand("1","test@bob.com"))
.expectEventsMatching(
Matchers.exactSequenceOf(
Matchers.messageWithPayload(
Matchers.matches(payload -> {
// Your UserCreatedEvent validation
// disregarding the time stamp here
})
)
)
);
}
您基本上可以配对任意数量的 Matchers
如果您愿意,可以使用它们中的方法。
希望这能回答您@vcetinick 的问题!
关于axon - 有没有一种方法可以不使用 expectEvents 直接从测试夹具测试事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64715974/
是否可以设置一个夹具来创建数据库 View 而不是 CakePHP 中的数据库表?在创建表的夹具和另一个应该是数据库 View 的夹具中使用相同的数据似乎效率低下。 最佳答案 我设法这样做,其中 vi
与这个锦标赛赛程算法作斗争。 代码运行良好,但我需要帮助将数据插入 mysql我似乎无法访问 $varables.. 非常感谢 php 专家的任何调整 ... $teamnames = "Arsena
我正在尝试开始使用 Symfony2,并一直在尝试为我的应用程序的模型层设置自动化测试。 Symfony2 书讨论了 Controller 的单元测试,但我找不到很多模型测试的示例。 我希望在每次测试
我想为我的测试使用一个通用的夹具: @RunWith(JUnitPlatform::class) abstract class BaseSpek: Spek({ beforeGroup {pr
使用这个固定装置,我想根据 before 固定装置 Hook 中 API 调用的结果设置 checkoutId,这样我就可以用它来设置页面我的测试 let checkoutId; fixture`Ch
我尝试过各种尝试。这是我最新的。我只是想 stub Axios 请求并返回固定装置。 const { expect } = require('chai'); const sinon = require
我是一名优秀的程序员,十分优秀!