Хорошо, я пытаюсь научить себя тестированию с использованием фиктивной инфраструктуры, и я работаю в VB.NET, я новичок в лямбда-выражениях, и все мои предыдущие приложения были написаны в версии 2005 или более ранней.У меня сейчас 2010 год. Итак, я попробовал Rhino.Mocks, но мне было трудно разобраться с этим в основном из-за более старого синтаксиса.Поскольку в наши дни никто не ведет блог в VB.NET, я изучал примеры на C # и пытался выяснить, что происходит.
Поэтому у меня есть ситуация, когда я передаю интерфейсконструктор класса и содержит ссылку на этот интерфейс.Когда вызывается метод для объекта, а событие вызывается, это должен обрабатывать класс, реализующий интерфейс.
У меня возникли проблемы, поэтому я попытался создать простую версию на C # и повторить шаги, описанные вvb.net.
Итак, мой интерфейс:
public interface IBroadcastClient
{
void MessageReceivedHandler(string msg);
}
Класс, который вызывает события:
public class Broadcaster
{
public Broadcaster(IBroadcastClient c)
{
_client= c;
this.SendMessage += new MessageReceived(_client.MessageReceivedHandler);
}
private IBroadcastClient _client;
public event MessageReceived SendMessage;
public void SendMessageNow()
{
string _Message;
if (SendMessage != null)
{
_Message = @"Yay!";
SendMessage(_Message);
}
}
}
Тест:
[TestMethod]
public void TestSendMessageWithIgnoreParameter()
{
//string msg = @"Yay!";
var client = A.Fake<IBroadcastClient>();
Broadcaster b = new Broadcaster(client);
b.SendMessageNow();
A.CallTo(() => client.MessageReceivedHandler(A<string>.Ignored)).MustHaveHappened();
}
Это проходит, проблем пока нет.
Теперь попробуем то же самое в vb.net;Тот же интерфейс и класс Broadcaster, только в vb.net, а не в C #, с первоначально hte после модульного тестирования.
<TestMethod()>
Public Sub TestMethod1()
Dim client = A.Fake(Of IBroadcastClient)()
Dim b As New Broadcaster(client)
b.SendMessageNow()
NextCall.To(client).MustHaveHappened()
client.MessageReceivedHandler(A(Of String).Ignored)
End Sub
Это происходит со следующим сообщением об ошибке;"Утверждение не удалось для следующего вызова: TestFakeItEasyVB.IBroadcastClient.MessageReceivedHandler (msg:) Ожидается найти его хотя бы один раз, но нашел его # 0 раз среди вызовов: 1: TestFakeItEasyVB.IBroadcastClient.MessageReceivedHandler (msg:" Yay!)
Как ни странно, если написать это таким образом;
<TestMethod()>
Public Sub TestMethod3()
Dim client = A.Fake(Of IBroadcastClient)()
Dim b As New Broadcaster(client)
b.SendMessageNow()
A.CallTo(Sub() client.MessageReceivedHandler(A(Of String).Ignored)).MustNotHaveHappened()
End Sub
Также произойдет сбой с тем же сообщением об ошибке, однако эта версия теста пройдена.
<TestMethod()>
Public Sub TestMethod2()
Dim client = A.Fake(Of IBroadcastClient)()
Dim b As New Broadcaster(client)
b.SendMessageNow()
NextCall.To(client).MustHaveHappened()
client.MessageReceivedHandler("Yay!")
End Sub
Thisвариация также передается в C #, моя проблема в том, что я делаю неправильно, чтобы получить тест, игнорирующий аргумент, переданный обработчику поддельных событий?