Прошло много времени с тех пор, как я работал с nUnit и искал способы проведения интеграционных тестов с SignalR. В mocha у нас есть обратный вызов done()
, который может быть выполнен, чтобы отметить, что тест должен закончиться.
К сожалению, там, кажется, нет эквивалента в nUnit и мы пытаемся найти способ завершить тестирование только при получении сообщения от концентратора, как показано ниже:
[Test]
public async Task Can_Register_As_A_Player () {
connection = new HubConnectionBuilder ()
.WithUrl ("https://localhost:5001/gameHub")
.AddMessagePackProtocol ()
.Build ();
connection.On<RegisterResponseDTO> (EventName.Register, registerResponseDTO => {
Assert.Multiple (() => {
Assert.IsInstanceOf<DateTime> (registerResponseDTO.ID);
Assert.IsInstanceOf<DateTimeOffset> (registerResponseDTO.Created);
Assert.IsInstanceOf<DateTimeOffset> (registerResponseDTO.Updated);
Assert.IsInstanceOf<string> (registerResponseDTO.GameCenterID);
});
// only end now
});
await connection.StartAsync ();
var registerDTO = new RegisterDTO ();
registerDTO.Name = "Samuel Goldenbaum";
registerDTO.GameCenterID = Guid.NewGuid ().ToString ();
registerDTO.PlayerDevice = new PlayerDevice {
DeviceUniqueIdentifier = Guid.NewGuid ().ToString (),
DeviceType = "Desktop",
DeviceName = "Samuel’s MacBook Pro",
DeviceModel = "MacBookPro14,3"
};
await connection.InvokeAsync<RegisterDTO> (EventName.Register, registerDTO);
// don't end now, wait till connection.On<RegisterResponseDTO> above
}