public void DynamicMessageCopy() { TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); TestUtil.SetAllFields(builder); TestAllTypes message = builder.Build(); DynamicMessage copy = DynamicMessage.CreateBuilder(message).Build(); reflectionTester.AssertAllFieldsSetViaReflection(copy); // Oneof FieldDescriptor bytesField = TestAllTypes.Descriptor.FindFieldByName("oneof_bytes"); FieldDescriptor uint32Field = TestAllTypes.Descriptor.FindFieldByName("oneof_uint32"); Assert.True(copy.HasField(bytesField)); Assert.False(copy.HasField(uint32Field)); DynamicMessage.Builder dynamicBuilder = DynamicMessage.CreateBuilder(message); dynamicBuilder[uint32Field] = 123U; DynamicMessage copy2 = dynamicBuilder.Build(); Assert.IsFalse(copy2.HasField(bytesField)); Assert.IsTrue(copy2.HasField(uint32Field)); Assert.AreEqual(123U, copy2[uint32Field]); }