【发布时间】:2014-02-03 11:44:12
【问题描述】:
我正在编写单元测试,我想确保使用一些参数调用特定方法:
var myMock = MockRepository.GenerateMock<IMyService>();
IMyService 上有一个带有签名的方法
public bool SomeMethod(IEnumerable<string> values)
我有一个使用我的模拟的业务逻辑层
public class BusinessLogic
{
protected MyMock MyMock{get;set;}
public BusinessLogic (myMock)
{
this.MyMock = myMock;
}
public bool DoLogic()
{
var myCollection = // loaded from somewhere
return this.MyMock(myCollection);
}
}
我想通过确保正确调用 SomeMethod 来测试 DoLogic 方法。但是我无法控制(并且真的不希望它控制集合的顺序)。
我想断言 SomeMethod 方法是使用 IEnumerable {"a", "b", "c"} 调用的,但我不在乎顺序。
目前为止
myMock.Expect(x => x.MyMethod(new string[]{"a", "b", "c"});
和
myMock.AssertWasCalled(x => x.MyMethod(new string[]{"a", "b", "c"});
但是如果用{"b", "a", "c"} 调用它会失败。我不想更改我的业务逻辑以确保参数的顺序(因为这会围绕测试设计 BLL)。
如何断言这个方法调用?
【问题讨论】:
-
为了测试目的,你测试它的顺序并不重要,所以只需
Expect和Assert以相同的顺序。 -
@AdamHouldsworth 但如果我的 BLL 以不同的顺序通过集合,它不会通过测试吗?
-
据我所见,您正在模拟通话,因此您可以控制订单...除非我错过了问题中的某些内容。我的评论是基于您控制输入以及对输出的期望这一事实。如果您不控制输入,那么我的评论是没有意义的。抱歉,那部分我不是很清楚。
-
@AdamHouldsworth 感谢您的帮助,我已尝试扩展以准确显示我要测试的课程
标签: c# unit-testing rhino-mocks