var mock = new Mock<IFoo>();
Het bevenstaande stukje code beschrijft hoe er een mock van een object aangemaakt kan worden
Mock<T> object aan
IFoo ding = mock.Object;
.Object geeft het gemockte object zelf terug
IFoo ding = mock.Object { CallBase = true };
Wanneer CallBase op true gezet wordt, worden base classes aangeroepen
System.Web classes.mock.Setup(foo => foo.DoSomething("ping")).Returns(true);
Als DoSomething(...) aangeroepen wordt met "ping" als parameter, wordt er true teruggegeven
mock.Setup(foo => foo.DoSomething("reset")).Throws<InvalidOperationException>();
mock.SetUp(foo => foo.DoSomething("")).Throws<ArgumentException>();
DoSomething(...) wordt aangeroepen met "reset", wordt er een InvalidOperationException gegooidDoSomething(...) wordt aangeroepen met "", wordt er een ArgumentException gegooidDoSomething(...) wordt aangeroepen met iets anders dan de bovenstaande waardes, gebeurt er nietsSetup(...) werkt ook op voids.
using Moq.Protected;
[TestMethod]
public void TestSomething()
{
var mock = new Mock<CommandBase>();
mock.Protected()
.Setup<int>("Execute")
.Returns(5);
// More code...
}
Protected() maakt het mogelijk om protected methodes te mocken.
stringmock.Verify(foo => foo.DoSomething("ping"));
mock.Verify(foo => foo.DoSomething("ping"), "Custom error message");
Middels de Verify(...) kan er geverifieerd worden of een methode aangeroepen wordt
Verify(...) kan er ook een error message meegegeven worden
mock.Verify(foo => foo.DoSomething("ping"), Times.Never);
mock.Verify(foo => foo.DoSomething("ping"), Times.AtLeastOnce());
Aan de verify kan een Times object meegegeven worden.
mock.VerifyGet(foo => foo.Name, "John doe");
mock.VerifyGet(foo => foo.Name);
mock.VerifySet(foo => foo.Name);
De bovenstaande voorbeelden illustreren het verifyen van getters en setters
mock.SetupAllProperties();
Mockt alle properties
mock.Setup(c => c.Clone()).Returns("Hello").Verifiable();
var target = new DingOmTeTesten(mock.Object);
int result = target.BerekenIets();
mock.VerifyAll();
Assert.AreEqual(5, result);
DingOmTeTestenmock.VerifyAll() controleert dat alle Setup(...) cases waarbij een Verifiable() gebruikt wordt, aangeroepen zijnmock
.Setup(foo => foo.DoSomething("ping"))
.Returns(true)
.Callback(() => calls++);
Aan de Callback(...) kan een lambda meegegeven worden. Deze wordt uitgevoerd wanneer DoSomething(...) aangeroepen wordt.
mock.Raise(m => m.FooEvent += null, new FooEventArgs(fooValue));
Raise een event op de mock.
mock.Setup(foo => foo.Submit()).Raises(f => f.Sent += null, EventArgs.Empty);
Raise een event op de mock wanneer Submit() aangeroepen wordt.
var mock = new Mock<IFoo>(MockBehavior.Loose);
long result = mock.Object.CalculateSomething(10, 20);
result krijgt 0 als waarde. MockBehavior.Loose zorgt ervoor dat de default waarde teruggegeven wordt wanneer er geen setup is gedaan voor de betreffende methode
Dit is de default, wanneer er geen MockBehavior mee wordt gegeven.
var mock = new Mock<IFoo>(MockBehavior.Strict);
long result = mock.Object.CalculateSomething(10, 20);
Gooit een exception omdat er geen setup gedaan is voor CalculateSomething(...)
Deze manier heeft in de meeste gevallen voorkeur omdat:
Een event bus is een soort mailbox waar berichten naar gestuurd kunnen worden
Service installeren op machine
– of –
Docker container aanzetten voor RabbitMQ
docker pull rabbitmq:3.6.14-management
docker run -d --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3.6.14-management
Als queue kan je je aanmelden bij een exchange. De exchange stuurt, aan de hand van topics, de event naar de juiste queue.
American Standard Code for Information Interchange
Er zijn 2 conversies nodig
Zo’n beetje alle toetsen op het toetsenbord
ASCII nummers met daarnaast alle andere karakters met hun eigen nummer
Is unicode, maar dan in 8 bits
Maakt gebruik van escape karakters
Als je chinees bent, heb je alleen maar speciala karakters. Dan heb je dus meer bytes nodig. Hiervoor zijn UTF-16 en UTF-32