如何重置protobuf-net RuntimeTypeModel.Default模型?

时间:2015-06-30 06:53:21

标签: protobuf-net

我尝试对protobuf-net配置进行单元测试,遗憾的是,事实证明(('A', 'd'), ('A', 'e'), ('B', 'd'), ('B', 'e'), ('C', 'd'), ('C', 'e')) 上没有Clear方法(或类似方法)。 由于我在整个应用中使用了RuntimeTypeModel.Default,因此我不想切换到RuntimeTypeModel.Default

有没有办法通过RuntimeTypeModel.Create()方法重置/清除/删除添加到RuntimeTypeModel.Default的类型?

1 个答案:

答案 0 :(得分:0)

我遇到了与xUnit测试类似的问题。构造函数将为每个测试实例化,RuntimeTypeModel已经具有代理类型并且失败。解决方案是在xUnit中使用ClassFixture(我相信它是针对nUnit的TestFixture吗?)

using System;
using System.Collections.Generic;
using System.IO;
using NodaTime;
using ProtoBuf.Meta;
using Quantum.Serialisation;
using Quantum.Serialisation.Surrogates;
using Xunit;

namespace Quantum.SerialisationTests
{

    public class TestFixture : IDisposable
    {
        private RuntimeTypeModel model;

        public TestFixture()
        {
            RuntimeTypeModel.Create();
            model = RuntimeTypeModel.Default;
            model.Add(typeof (ZonedDateTimeSurrogate), true);
            model.Add(typeof (ZonedDateTime), false).SetSurrogate(typeof (ZonedDateTimeSurrogate));
        }

        public void Dispose()
        {
        }
    }

    public class ProtobufTests : IClassFixture<TestFixture>
    {

        public ProtobufTests()
        {
        }

        // Tests go here

        public void SetFixture(TestFixture data)
        {
        }
    }
}

无论您在ProtobufTests规范中进行多少次测试,代理人只会被添加一次。