Я использовал бы мерзавец . Мерзавец repos является действительно маленьким и не требует демона. Можно, вероятно, установить cygwin или msysgit на карте флэш-памяти.
Редактирование: вот некоторые инструкции для установки cygwin на флеш-накопителе
Вы не должны писать утверждения в фоновом потоке (скажем, в обработчике фоновых событий), потому что среда тестирования не может справиться с этим. Здесь нужно только собирать ценности. Вы можете синхронизировать основной поток, например, с помощью AutoResetEvents. Запишите значения в поля, подтвердите поля в основном потоке.
Если сообщения никогда не приходят, вам нужен тайм-аут.
Битовый псевдокод (на самом деле не тот псевдокод):
private AutoResetEvent ReceiveEvent = new AutoResetEvent(false);
private EventArgs args;
private bool ReceiveCalled = false;
// event handler with some argument
private void Receive(object sender, EventArgs args)
{
// get some arguments from the system under test
this.args= args;
// set the boolean that the message came in
ReceiveCalled = true;
// let the main thread proceed
ReceiveEvent.Set();
}
[TestMethod]
public void Test()
{
// register handler
Server.OnReceive += Receive;
var message = new Foo();
Client.Send(message);
// wait one second for the messages to come in
ReceiveEvent.WaitOne(1000);
// check if the message has been received
Assert.IsTrue(
ReceiveCalled,
"AcceptClientReceived has not been called");
// assert values from the message
Assert.IsInstanceOfType(args.Message, typeof(Foo))
}
Кстати : вы все равно можете написать обработчик как лямбда-выражение и даже избежать полей, используя локальные переменные. Но было бы труднее читать, если бы все было в одном методе.
Я подозреваю, что вам понадобится какой-то флаг «все в порядке»:
Assert
, который очищает флаг и, возможно, устанавливает другую переменную для «причины» (или добавляет ее в список), а затем полностью завершает поток (если возможно) Возможно, в некоторых тестовых фреймворках это встроено, но я не знаю ни о каком навскидку ...
I tried what Stefan suggested and the following works for me:
public void TestFooMessage() {
Foo message = null;
var resetEvent = new AutoResetEvent(false);
Server.OnReceive += (s, e) => {
message = e.Message;
resetEvent.Set();
};
var message = new Foo();
Client.Send(message);
if (resetEvent.WaitOne(1000)) {
Assert.IsInstanceOfType(e.Message, typeof(Foo));
} else {
Assert.Fail("Foo not received!");
}
}
Thanks!