C# 4.0 SystemUnderTest中的方法调用了AssertWas

C# 4.0 SystemUnderTest中的方法调用了AssertWas,c#-4.0,tdd,rhino-mocks,C# 4.0,Tdd,Rhino Mocks,我正在进入TDD;使用nUnit和RhinoMocks 3.5 我试图弄清楚如何在SystemUnderTest(SUT)中的方法上调用AssertWas。我的理解是,您不能模拟正在测试的系统。事实上,我当前的测试导致了一个异常,因为我正在SUT上调用AssertWas 订单中心: 如何断言在SUT中调用了GetOrders?我还没能在文件里查出来 非常感谢您的帮助 编辑: 我知道SUT中的GetOrders方法应该是私有的。我回顾了Roy Osherove的单元测试艺术,了解如何测试私有方法

我正在进入TDD;使用nUnit和RhinoMocks 3.5

我试图弄清楚如何在SystemUnderTest(SUT)中的方法上调用AssertWas。我的理解是,您不能模拟正在测试的系统。事实上,我当前的测试导致了一个异常,因为我正在SUT上调用AssertWas

订单中心:

如何断言在SUT中调用了GetOrders?我还没能在文件里查出来

非常感谢您的帮助

编辑:

我知道SUT中的GetOrders方法应该是私有的。我回顾了Roy Osherove的单元测试艺术,了解如何测试私有方法。罗伊说公开一个方法(用来测试)并不一定是件坏事,所以我会公开它

所以我为GetOrders编写了一个测试,并断言返回值应该是一个订单列表。这就是说,我相信我需要重新构造OnViewLoad_GetOrders的测试,方法是存根从GetOrders获得的值,并断言我在该对象上的操作结果


有人能证实和解释吗

不能在非模拟对象上使用
AssertWasCalled()
。只需通过接口抽象类
OrdersPresenter
(使用提取接口重构技术),然后

var ordersPresenter=MockRepository.GenerateMock();
视图。提出(…);
_ordersPresenter.AssertWasCalled(d=>d.GetOrders);
顺便说一句

对我来说,不清楚为什么Rhinomock没有对AssertWasCalled使用泛型参数约束

public static void AssertWasCalled<T>(this T mock, Action<T> action, 
    Action<IMethodOptions<object>> setupConstraints)
publicstaticvoidassertwastcalled(这个T mock,Action,
行动(限制)

基本上,
T
是不受限制的,但我认为最好将其限制在像
IMockMarkerInterface

这样的东西上,您不能在非模拟对象上使用
AssertWasCalled()
。只需通过接口抽象类
OrdersPresenter
(使用提取接口重构技术),然后

var ordersPresenter=MockRepository.GenerateMock();
视图。提出(…);
_ordersPresenter.AssertWasCalled(d=>d.GetOrders);
顺便说一句

对我来说,不清楚为什么Rhinomock没有对AssertWasCalled使用泛型参数约束

public static void AssertWasCalled<T>(this T mock, Action<T> action, 
    Action<IMethodOptions<object>> setupConstraints)
publicstaticvoidassertwastcalled(这个T mock,Action,
行动(限制)
基本上,
T
是不受限制的,但我认为最好将其限制在
IMockMarkerInterface

var ordersPresenter = MockRepository.GenerateMock<IOrderRepository>();

view.Raise(...);
_ordersPresenter.AssertWasCalled(d => d.GetOrders); 
public static void AssertWasCalled<T>(this T mock, Action<T> action, 
    Action<IMethodOptions<object>> setupConstraints)