public void For2SameInputEvents_ShouldExecuteDataParserOnce() { var testScheduler = new TestScheduler(); //arrange var target = new SerialPortDevice(_serialPortMock.Object, _dataParserMock.Object, testScheduler); //act target.ObserveDataReceived(10d); //input events _serialPortMock.Raise(port => port.DataReceived += null, "Test message 1"); _serialPortMock.Raise(port => port.DataReceived += null, "Test message 1"); //assert _dataParserMock.Verify(x => x.Parse(It.IsAny <string>()), Times.Once); }
public void ForNoInputFor5sec_ShouldNotThrowTimeoutException() { var testScheduler = new TestScheduler(); //arrange var target = new SerialPortDevice(_serialPortMock.Object, _dataParserMock.Object, testScheduler); //act && assert try { target.ObserveDataReceived(10d); //input event _serialPortMock.Raise(port => port.DataReceived += null, "Test message"); //wait 5 sec - less than timeout limit testScheduler.AdvanceBy(TimeSpan.FromSeconds(5).Ticks); } catch (Exception) { Assert.Fail("Exception was thrown but it shouldn't"); } }
public void ForNoInputFor20sec_ShouldThrowTimeoutException() { var testScheduler = new TestScheduler(); //arrange var target = new SerialPortDevice(_serialPortMock.Object, _dataParserMock.Object, testScheduler); //act && assert try { target.ObserveDataReceived(10d); //input event _serialPortMock.Raise(port => port.DataReceived += null, "Test message"); //wait 20 sec. - more than timeout limit testScheduler.AdvanceBy(TimeSpan.FromSeconds(20).Ticks); Assert.Fail("No exception was thrown"); } catch (Exception ex) { Assert.IsTrue(ex is TimeoutException); } }