2012-02-15 9 views
2

私はTDDに入っています。 nUnitとRhinoMockを使用して3.5。AssertWas SystemUnderTestのメソッドを呼び出す

私は、SystemUnderTest(SUT)のメソッドでAssertWasCalledをどのようにするかを考えようとしています。私の理解は、あなたがテスト中のシステムを模擬することができないということです。実際、現在のテストでは、SUTでAssertWasCalledを使用しているため、例外が発生します。

OrdersPresenter:

public void OnViewLoad_GetOrders() 
{ 
    var orders = GetOrders(); 
    View.Model.Orders = orders; 
} 

public List<Orders> GetOrders() 
{ 
    return _ordersRepository.GetAll(); 
} 

がOrdersPresenterTest:

_ordersPresenter = new OrdersPresenter(_view, _ordersRepository); 

[Test] 
public void OnViewLoad_GetOrders_Should_Call_GetOrders() 
{ 
    _view.Raise(v => v.LoadOrders += _ordersPresenter.OnViewLoad_GetOrders, view, new EventArgs); 
    _ordersPresenter.AssertWasCalled(d => d.GetOrders); // Getting non-mock exception here 
} 

どのように私はGetOrdersがSUTに呼ばれたアサートしますか?私はドキュメントでそれを理解することができませんでした。

ご協力いただきまして誠にありがとうございます。

編集:

私はSUTでGetOrdersメソッドはprivateである必要があります理解しています。私はロイOsheroveのユニットテストの技術私は戻ってプライベートメソッドをテストする方法を参照してください。 Royは、(テストするための)メソッドを公にすることは必ずしも悪いことではないと私は公開しています。

私はGetOrdersのテストを書いており、戻り値ShouldBeをアサートします。オーダーのリストつまり、GetOrdersから取得した値をスタブし、そのオブジェクトに対する自分のアクションの結果をアサートすることで、OnViewLoad_GetOrdersのテストを再構築する必要があると私は信じています。

誰かが確認して説明できますか?

答えて

0

AssertWasCalled()は非モックオブジェクトには使用できません。インターフェース(使用インターフェイスの抽出リファクタリング技術)でわずか抽象クラスOrdersPresenterとRhinoMocksがAssertWasCalled

public static void AssertWasCalled<T>(this T mock, Action<T> action, 
    Action<IMethodOptions<object>> setupConstraints) 
のための一般的なパラメータの制約を使用していない理由、それは明らかではない私にとってところで、その後

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

view.Raise(...); 
_ordersPresenter.AssertWasCalled(d => d.GetOrders); 

基本的にTは限定されませんが、私はそれがsomethignのようにsomethignのようにsomethignのように制限するほうがよいと信じていますIMockMarkerInterface

関連する問題