public void BuildRuntimeType_DefaultProperties_DontOverride() { // Arrange string value = "test value"; Mock <IMockableRuntimeTypePropertyManager> managerMock = new Mock <IMockableRuntimeTypePropertyManager>(MockBehavior.Strict); managerMock.Setup(x => x.GetValue(nameof(IInterfaceWithDefaultProperty.StringProperty))) .Returns(value); var manager = managerMock.Object; MethodInfo getMethod = manager.GetType().GetMethod("GetValue"); MethodInfo setMethod = manager.GetType().GetMethod("SetValue"); // Act Stopwatch sw = Stopwatch.StartNew(); Type runtimeType = RuntimeProxyBuilder.BuildRuntimeType(typeof(IInterfaceWithDefaultProperty), getMethod, setMethod); IInterfaceWithDefaultProperty impl = (IInterfaceWithDefaultProperty)Activator.CreateInstance(runtimeType, manager); string returnedValue = impl.DefaultProperty; sw.Stop(); Trace.WriteLine(sw.ElapsedMilliseconds); // Assert Assert.AreEqual(value, returnedValue); }
public void Implementation_InterfaceWithDefaultProperty_NotifyUnderlyingPropertyAccessed() { // Arrange Mock <IObservableProperty> observableMock = new Mock <IObservableProperty>(); observableMock.Setup(x => x.GetObservedProperties()).Returns(new Dictionary <string, IObservableProperty>()); observableMock.Setup(x => x.GetObservedCollections()).Returns(new Dictionary <string, IObservableCollection>()); observableMock.Setup(x => x.TryGetMember(It.IsAny <string>(), out It.Ref <object> .IsAny)).Returns(true); Mock <IPropertyAccessedSubscriber> subscriberMock = new Mock <IPropertyAccessedSubscriber>(); // Act var manager = new RuntimeProxyManager <IInterfaceWithDefaultProperty>(observableMock.Object); manager.Subscribe(subscriberMock.Object); IInterfaceWithDefaultProperty impl = manager.Implementation; Trace.WriteLine(impl.DefaultProperty); // Assert subscriberMock.Verify(x => x.OnPropertyAccessed(It.Is <PropertyAccessedArgs>(args => args.PropertyName == nameof(impl.StringProperty))), Times.Once); }