1
[HttpPost] 
public ActionResult Create(Car car) 
{ 
    _repository.CreateCar(car); 
    _repository.UpdateRegistrationDetails(car); 
} 

を呼び出す確保CreateCreateCarUpdateRegistrationDetailsを呼び出すことを確認するために、ライトユニットテストです。これらの方法で何が起こるかは問題ではありませんが、呼び出されるだけです。誰かが私にこのことを教えてもらえますか?このために模擬フレームワークを使用する必要がありますか? RhinoMockをインストールして使用しています。 RhinoMocksでExpectを使用していますか?再び私はEDIT [嘲笑方法は何ユニットテスト、私がやりたいと思ってる何ひとつの方法は、別の方法

を返さないようSetupまたはExpectの必要は

var mock = new Mock<IRepository>(); 

var controller = new Controller(mock.Object); //assuming this is how you create it 

var car = new Car(); 
controller.Create(car); 

mock.Verify(x => x.CreateCar(car)); 
mock.Verify(x => x.UpdateRegistrationDetails(car)); 

を(ここではもちろんの名前を想定していない)あなたが代わりにリポジトリを模擬する必要があると思う部品番号を使用して

答えて

4

ここで は、最良の答えは、パーソナルプラグインとしてモックフレームワークを使用することですRhino.Mocks例

var mock = MockRepository.GenerateStub<IRepository>(); 

var controller = new Controller(mock); //assuming this is how you create it 

var car = new Car(); 
controller.Create(car); 

mock.AssertWasCalled(x => x.CreateCar(car)); 
mock.AssertWasCalled(x => x.UpdateRegistrationDetails(car)); 
+0

また、_ _リポジトリのいずれかがインタフェースであるか、または両方のメソッドが仮想であることを確認してください –

1

ですここでrsが言及している。汚い方法ですが、フレームワークを習得したくない場合(実際にすべきことです)、テストクラスを作成して仮想メソッドをオーバーライドすることがあります。あなたのケースでは

public class RepoUnderTest : Repo 
{ 
    public bool UpdateRegistrationDetailsCalled = false; 
    public override void UpdateRegistrationDetails(Car car) 
    { 
     base.UpdateRegistrationDetails(car); 
     UpdateRegistrationDetailsCalled = true; 
    } 
} 

のようなものは、あなたが再び

[HttpPost] 
public ActionResult Create(Car car) 
{ 
    // Arrange 
    var _repository = new RepoUnderTest(); 

    // Act 
    _repository.CreateCar(car); 

    // Assert 
    Assert.IsTrue(_repository.UpdateRegistrationDetailsCalled); 
} 

に似た何かをテストすることができますモックフレームワークは最高です。そして、私はそれらに投票したいと思いますが、時々、これらのことをテストするのは簡単です。

1

Expect()をRhinoMocksで使用することについて。私はスタブと 'Stub()'またはAssertWasCalled()メソッドを可能な限り使用することを前提にしています。 Expect()は、他に何も働かない場合に使用されます。

関連する問題