Невозможно смоделировать асинхронное поведение службы с помощью макета Rhyno - PullRequest
0 голосов
/ 08 марта 2011

Я пытаюсь смоделировать (с помощью насмешки Rhyno) поведение асинхронной службы.

Вот пример: я получил службу с одним методом с именем void GetServerState (). Поскольку этот метод асинхронный, он является пустым, но когда он вызывается, он вызывает прокси и вызывает событие GetServerStateCompleted (object, eventargs). На данный момент я надеюсь, что все все еще следуют за мной; -)

Теперь, давайте посмотрим на макет (который на самом деле заглушка, но не берите в голову)

public class MyStub
{
 protected MockRepository MockRepository {get;set;}
 public IMyService MyService {get;set;} //the service with GetServerState() Method
 protected delegate void DelegateVoid(); //for easy writting

 public MyStub()
 {
   MockRepository = new MockRepository ();
   MyService = MockRepository.Stub<IMyService >();

   //And now, let's try to mock the behaviour
   MyService.Stub(sm => sm.GetServerState())
                .IgnoreArguments()
                .Do((DelegateVoid)GetServerStateCompletedBehaviour);
 }

 //the method that should be launched when someone call GetServerState on the Stub
 protected void GetServerStateCompletedBehaviour()
 {
  MyService.Raise(x=>x.GetServerStateCompleted+=null,MyService,new EventArgs());
 }
}

//And here is how I would like to use it
[TestMethod]
void Test()
{
 try
 {
  IMyService Stub = new MyStub().MyService;
  Stub += new EventHandler(EventMethod);
  Stub.GetServerState();
  Assert.Fail();
 }
 catch(MyException){}
}

void EventMethod(Object sender, EventArgs e)
{
 Throw new MyException();
}

Поскольку мне все кажется правильным, этот код не работает вообще. У кого-нибудь есть начало объяснения, почему оно не должно работать?

ТНХ,

1 Ответ

1 голос
/ 08 марта 2011

Я нашел, что было не так:

public MyStub()
 {
   MockRepository = new MockRepository ();
   //MyService = MockRepository.Stub<IMyService >(); //Stupid Stupid Stupid !!!
   MyService = MockRepository.GenerateStub<IMyService >();

   //And now, let's try to mock the behaviour
   MyService.Stub(sm => sm.GetServerState())
                .IgnoreArguments()
                .Do((DelegateVoid)GetServerStateCompletedBehaviour);
 }
...