Mongo 自定义序列化程序在连续运行多个测试夹具时失败

Mongo custom serializer fails when running several test fixtures in a row

提问人:Ogier 提问时间:11/16/2023 最后编辑:Ogier 更新时间:11/16/2023 访问量:28

问:

我正在使用 Nunit 对使用 MongoDb 的项目进行单元测试。我需要一个自定义序列化程序来序列化我自己的命名空间中的对象。我已将此注册封装在静态函数中。我需要在测试的设置中使用此功能。如果我一个接一个地运行我的测试夹具,它就可以工作了。但是,如果我尝试运行它们,我会遇到以下异常:MongoDB.Bson.BsonSerializationException : There is already a serializer registered for type Object.

我使用带有驱动程序 v2.22 和 NUnit v2.6.4 的 MongoDb v5.0

下面是一些经过编辑的代码:

public static class MongoSerializerHelper
{
    /// <summary>
    /// Registers all types whose namespace starts with "MyNameSpace"
    /// </summary>
    public static void RegisterCustomTypesForSerializer()
    {
     
     var objectSerializer = new ObjectSerializer(type =>
     {
       var isTypePartOfNameSpace = type.FullName.StartsWith("MyNameSpace");
       return ObjectSerializer.DefaultAllowedTypes(type) || isTypePartOfNameSpace;
     });

     BsonSerializer.RegisterSerializer(objectSerializer);
    }
}
[TestFixture]
public class OneTestFixture
{
  [TestFixtureSetUp]
  public void SetUp()
  {
    MongoSerializerHelper.RegisterCustomTypesForSerializer();
  }
  
  //tests after that
}

问题似乎在于我的序列化程序注册了多次,但事实并非如此:如果我在同一次运行中运行多个测试夹具,从一个注册序列化器的测试夹具开始,则第二个测试夹具将在第一次尝试注册时失败并出现相同的错误。 在项目的任何其他部分都没有注册序列化程序。此外,如果是这种情况,您将在错误消息中看到实际类型,而不是 . 我已经在线查找了错误消息,但我没有找到任何关于此错误的引用。ObjectObject

MongoDB NUnit

评论


答: 暂无答案