私のテストではがほとんどの場合に合格しますが、失敗することがあります。私はそれがスレッドの問題かもしれないと思うが、ロックや睡眠などを試して、問題がどこにあるのか見つけようとはしなかった。私は正しい構文を使用していますか?しばらくしてRhinoを使用して戻ってきました。Rhino MocksのAAA構文とスレッドの安全性
ここで私のテストのサニタイズバージョンです。私が言うように、彼らは4回のうち3回働いたが、それからブームを起こす。
[TestFixture]
public class Tests
{
[Test]
public void ReprocessItems()
{
// Arrange
Presenter presenter = new Presenter();
Model model = new Model();
model.Data.Add(new ViewModel(new Item { Id = 1 }) { IsSelected = true });
model.Data.Add(new ViewModel(new Item { Id = 2 }) { IsSelected = true });
model.Data.Add(new ViewModel(new Item { Id = 3 }) { IsSelected = false });
model.Data.Add(new ViewModel(new Item { Id = 4 }) { IsSelected = false });
presenter.Model = model;
var gateway = MockRepository.GenerateStub<IGateway>();
presenter.Gateway = gateway;
// Act
presenter.ReprocessItems();
// Assert
gateway.AssertWasCalled(o => o.ReprocessItem(1, presenter.ReprocessDone));
gateway.AssertWasCalled(o => o.ReprocessItem(2, presenter.ReprocessDone));
}
[Test]
public void ShowItemReferralCommentary()
{
// Arrange
Presenter presenter = new Presenter();
Model model = new Model();
model.Data.Add(new ViewModel(new Item { Id = 1 }) { IsSelected = true });
model.Data.Add(new ViewModel(new Item { Id = 2 }) { IsSelected = false });
presenter.Model = model;
var gateway = MockRepository.GenerateStub<IGateway>();
presenter.Gateway = gateway;
var view = MockRepository.GenerateStub<IView>();
presenter.View = view;
gateway.Stub(x => x.RequestItemCommentary(1)).Return("This is some commentary");
// Act
presenter.ShowItemReferralCommentary();
// Assert
gateway.AssertWasCalled(o => o.RequestItemCommentary(1));
view.AssertWasCalled(o => o.ShowMessageBox("This is some commentary", "Referral Commentary"));
}
[Test]
public void AcceptSelectedItems()
{
// Arrange
Presenter presenter = new Presenter();
Model model = new Model();
model.Data.Add(new ViewModel(new Item { Id = 1 }) { IsSelected = false });
model.Data.Add(new ViewModel(new Item { Id = 2 }) { IsSelected = false });
model.Data.Add(new ViewModel(new Item { Id = 3 }) { IsSelected = true });
model.Data.Add(new ViewModel(new Item { Id = 4 }) { IsSelected = true });
presenter.Model = model;
var gateway = MockRepository.GenerateStub<IGateway>();
presenter.Gateway = gateway;
// Act
presenter.AcceptSelectedItems();
// Assert
gateway.AssertWasCalled(o => o.AcceptItem(3, presenter.AcceptCompleted));
gateway.AssertWasCalled(o => o.AcceptItem(4, presenter.AcceptCompleted));
}
}
編集:**以下のコメントに従って、私は一時的にThread.Sleep(500)を追加してこれを解決しました。それぞれが断言する前に。 Thread.Sleepsは一般的にコードの匂いですが、私はそれをロックしたいと思いますが、私は
が駄目です。
は実用的です。あなたがより良い方法を持っているなら、私に知らせてください。
これはスレッド化されたメソッドですか? – Simone
ReprocessItemとReprocessDoneのようなものがコールバックです。 –