public void AddRectangleColliderComponent_ShouldAddRectangleColliderComponentAndNotifyWithEvent() { // Arrange var entity = new Entity(); var entityModel = new EntityModel(entity); object?eventSender = null; ComponentAddedEventArgs?eventArgs = null; entityModel.ComponentAdded += (sender, args) => { eventSender = sender; eventArgs = args; }; // Act entityModel.AddRectangleColliderComponent(); // Assert Assert.That(entity.Components, Has.Count.EqualTo(1)); Assert.That(entityModel.Components, Has.Count.EqualTo(1)); var rectangleColliderComponent = entity.Components.Single(); var rectangleColliderComponentModel = entityModel.Components.Single(); Assert.That(rectangleColliderComponent, Is.TypeOf <RectangleColliderComponent>()); Assert.That(rectangleColliderComponentModel, Is.TypeOf <RectangleColliderComponentModel>()); // Assert that created component model is bound to component ((RectangleColliderComponentModel)rectangleColliderComponentModel).Dimension = new Vector2(123, 456); Assert.That(((RectangleColliderComponent)rectangleColliderComponent).Dimension, Is.EqualTo(new Vector2(123, 456))); Assert.That(eventSender, Is.EqualTo(entityModel)); Debug.Assert(eventArgs != null, nameof(eventArgs) + " != null"); Assert.That(eventArgs.ComponentModel, Is.EqualTo(rectangleColliderComponentModel)); }