public void GenerateType() { // Arrange Type baseType = typeof(MyBaseType); Type[] interfaceTypes = new Type[] { typeof(SomeInterfaceA), typeof(SomeInterfaceB) }; // Act Type newType = DynamicTypeGenerator.GenerateType("SomeTypeName", baseType, interfaceTypes); // Assert Assert.AreEqual("System.Web.Mvc.{Dynamic}.SomeTypeName", newType.FullName, "New type name is incorrect."); Assert.IsTrue(newType.IsPublic, "New type should have public visibility."); Assert.IsTrue(newType.IsSubclassOf(baseType), "New type does not have proper base class."); Assert.IsTrue(typeof(SomeInterfaceA).IsAssignableFrom(newType), "New type does not implement SomeInterfaceA."); Assert.IsTrue(typeof(SomeInterfaceB).IsAssignableFrom(newType), "New type does not implement SomeInterfaceB."); ConstructorInfo[] constructors = newType.GetConstructors(); Assert.AreEqual(3, constructors.Length, "Incorrect number of public constructors."); Assert.AreEqual( baseType.GetMethods(BindingFlags.Public | BindingFlags.Instance).Length, newType.GetMethods(BindingFlags.Public | BindingFlags.Instance).Length, "Number of public instance methods should not have increased."); MyBaseType o1 = (MyBaseType)Activator.CreateInstance(newType, new object[] { 1, 10, 100, 1000 }); Assert.AreEqual(1, o1.ParamA); Assert.AreEqual(10, o1.ParamB); Assert.AreEqual(100, o1.ParamC); Assert.AreEqual("public", o1.ConstructorCalled); MyBaseType o2 = (MyBaseType)Activator.CreateInstance(newType, new object[] { 0, 0, 0, (short)0 }); Assert.AreEqual("protected", o2.ConstructorCalled); MyBaseType o3 = (MyBaseType)Activator.CreateInstance(newType, new object[] { 0, 0, 0, (long)0 }); Assert.AreEqual("protected internal", o3.ConstructorCalled); SomeInterfaceA oA = (SomeInterfaceA)o1; Assert.AreEqual("Hello from sealed A!", oA.SomeMethodA(), "SomeInterfaceA was not implemented correctly."); SomeInterfaceB oB = (SomeInterfaceB)o1; Assert.AreEqual("Hello from virtual B: 42!", oB.SomeMethodB(42), "SomeInterfaceB was not implemented correctly."); }
public async Task <Response <MyBaseType> > GetValidAsync(CancellationToken cancellationToken = default) { using var message = CreateGetValidRequest(); await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false); switch (message.Response.Status) { case 200: { MyBaseType value = default; using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, cancellationToken).ConfigureAwait(false); if (document.RootElement.ValueKind == JsonValueKind.Null) { value = null; } else { value = MyBaseType.DeserializeMyBaseType(document.RootElement); } return(Response.FromValue(value, message.Response)); }