ruby-on-rails - 是否有与 mockito ArgumentCaptor 等效的 rspec?
问题描述
我有一个 java 项目,它使用 ArgumentCaptor 来断言对特定模拟对象(存根)的调用。是否有等效的 Rails Rspec ArgumentCaptor?我希望能够模拟 ActiveRecord 模型并比较断言传递给保存调用的参数。
更新 1
下面是一个使用 ArgumentCaptor 的 Java 代码示例。请注意装饰模拟的能力,以便收集传递给您正在测试的方法的所有对象,然后对它们进行断言。
@Test
public void should_import_all_tax_treatment_domain_data() throws Exception {
// Arrange
this.mockInputStream("DOMAIN-treatment.json");
// Act
this.importService.runImport("DOMAIN-treatment.json");
// Assert
ArgumentCaptor<TaxTreatment> argument = ArgumentCaptor.forClass(TaxTreatment.class);
verify(this.taxTreatmentRepositoryMock, times(9)).findByCode(anyString());
verify(this.taxTreatmentRepositoryMock, times(9)).save(argument.capture());
assertEquals("Withhold All", argument.getAllValues().get(0).getName());
assertEquals("Withhold", argument.getAllValues().get(1).getName());
assertEquals("Pay Cash", argument.getAllValues().get(2).getName());
assertEquals("None", argument.getAllValues().get(3).getName());
assertEquals("Sell All", argument.getAllValues().get(4).getName());
assertEquals("Sell for Taxes", argument.getAllValues().get(5).getName());
assertEquals("Swap", argument.getAllValues().get(6).getName());
assertEquals("Debit Rtl Acct", argument.getAllValues().get(7).getName());
assertEquals("Payroll Deduction", argument.getAllValues().get(8).getName());
}
解决方案
这似乎是在 RSpec 中实现 Mockito 的第一次尝试: rspec-fire
RSpec3 现在支持 Mocks: rspec3-mocks
Sandi Metz 关于 Mocks 的演讲很好: TDD 魔术
这个关于 Mocks in Ruby 的演讲很有用: Why you don't know mocks
推荐阅读
- selenium - 如何在 testNG 中使用组
- javascript - 如何根据页面大小调整按钮图标的大小
- javascript - 在Javascript中将具有未知路径的嵌套Json值推送到数组中
- arrays - 传递 slice 作为参考以反映调用者的变化
- firebase - Firestore 社交网络数据结构
- java - 我无法将我的 Edittext Multiline 插入到服务器
- jquery - jQuery 选择器,包括属性和同级选择器不起作用
- dart - 如何在颤动中自动调整行内的文本大小
- javascript - 在此示例中是否可以反转下一个和上一个键盘导航?
- java - 如何在 Android Studio 中修复 ChannelException?