Что вызывает: ошибка транспорта Unix? - PullRequest
2 голосов
/ 03 декабря 2010

Я делаю юнит-тест (используя NUnit) на Postgresql, к сожалению, это вызывает ошибку:

Internal error
    RemotingException: Unix transport error.

Примечание: ошибка не возникает, если я использую Sqlite

Код:

 using System;
 using ncfg = NHibernate.Cfg;
 using System.Collections.Generic;
 using System.Reflection;
 using NHibernate;
 using System.Data;
 using NHibernate.Tool.hbm2ddl;
 using NHibernate.Dialect;
 using NHibernate.Driver;
 using NHibernate.ByteCode.LinFu;
 using NUnit.Framework;
 using NHibernate.Mapping;



 namespace RuntimeNhibernate
 {
  class MainClass
  {
   public static void Main (string[] args)
   {


    using(var c = new BlogTestFixture())
    {
     c.CanSaveAndLoadBlog();

    }

   }
  }



  public class InMemoryDatabaseTest : IDisposable
  {
   private static ncfg.Configuration Configuration;
   private static ISessionFactory SessionFactory;
   protected ISession session;

   public InMemoryDatabaseTest(Assembly assemblyContainingMapping)
   {
    if (Configuration == null)
    {

     Configuration = new ncfg.Configuration()
      .SetProperty(ncfg.Environment.ReleaseConnections,"on_close")
      .SetProperty(ncfg.Environment.Dialect, typeof (SQLiteDialect).AssemblyQualifiedName)
      .SetProperty(ncfg.Environment.ConnectionDriver, typeof(SQLite20Driver).AssemblyQualifiedName)
      .SetProperty(ncfg.Environment.ConnectionString, "data source=:memory:")
      .SetProperty(ncfg.Environment.ProxyFactoryFactoryClass, typeof (ProxyFactoryFactory).AssemblyQualifiedName)
      .AddAssembly(assemblyContainingMapping);


     /*Configuration = new ncfg.Configuration()
      .SetProperty(ncfg.Environment.ReleaseConnections,"on_close")
      .SetProperty(ncfg.Environment.Dialect, typeof (PostgreSQLDialect).AssemblyQualifiedName)
      .SetProperty(ncfg.Environment.ConnectionDriver, typeof(NpgsqlDriver).AssemblyQualifiedName)
      .SetProperty(ncfg.Environment.ConnectionString, "Server=127.0.0.1;Database=memdb;User ID=postgres;Password=password;Pooling=false;")
      .SetProperty(ncfg.Environment.ProxyFactoryFactoryClass, typeof (ProxyFactoryFactory).AssemblyQualifiedName)
      .AddAssembly(assemblyContainingMapping);*/

     SessionFactory = Configuration.BuildSessionFactory();
    }

    session = SessionFactory.OpenSession();

    new SchemaExport(Configuration).Execute(true, true, false, session.Connection, Console.Out);
   }

   public void Dispose()
   {
    session.Dispose();
   }
  }//class InMemory

  public class Blog
  {
   public virtual int BlogId { get; set; }
   public virtual bool AllowsComments { set; get; }
   public virtual DateTime CreatedAt { get; set; }
   public virtual string Subtitle { get; set; }
   public virtual string Title { get; set; }
  }

  [TestFixture]
  public class BlogTestFixture : InMemoryDatabaseTest
  {
   public BlogTestFixture() : base(typeof(Blog).Assembly)
   {
   }


   [Test]
   public void IsOK()
   {
    Assert.AreEqual(true, true);
    return;
   }

   [Test]     
   public void CanSaveAndLoadBlog()
   {


    object id;




    using (var tx = session.BeginTransaction())
    {
     id = session.Save(new Blog
     {
      AllowsComments = true,
      CreatedAt = new DateTime(2000,1,1),
      Subtitle = "Hello",
      Title = "World",
     });

     tx.Commit();
    }

    session.Clear();

    Console.WriteLine("Hello {0}", id);


    using (var tx = session.BeginTransaction())
    {
     var blog = session.Get<Blog>(id);




     Assert.AreEqual(new DateTime(2000, 1, 1), blog.CreatedAt);
     Assert.AreEqual("Hello", blog.Subtitle);
     Assert.AreEqual("World", blog.Title);
     Assert.AreEqual(true, blog.AllowsComments);

     tx.Commit();
    }
   }
  }//Test


 }//namespace

В чем может быть причина, когда я тестирую Postgresql, это приводит к RemotingException: ошибка транспорта Unix. ?

Если я запускаю код вне модульного теста (например, Main), он работает. Кстати, если я провожу модульный тест Sqlite, это тоже не вызывает никаких ошибок

Ответы [ 2 ]

0 голосов
/ 11 января 2015

Это исключение возникает, когда модульный тест в MonoDevelop вызывает исключение, которое не может быть перехвачено исполнителем теста (т. Е. Когда тест запускает некоторые потоки и они дают сбой).

Если у вас есть такой тест, который серый даже после запуска

not executable test

и на блоке тестирования устройства отображается внутренняя ошибка

enter image description here

вам следует попробовать запустить тест на консоли с помощью nunit-console (должно быть в репозитории вашего дистрибутива, откуда приходит mono) и исключить исключение.

В моем случае это было простое исключение с несколькими перечислениями в подпотоке моего теста.

Unhandled exceptions:
1) Residata.Platform.Server.Message.Test.MemoryBrokerTest.AssertThatReceiveMethodWaitsUntilPublish : System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
   at System.Collections.Generic.List`1+Enumerator[Residata.Platform.Contract.Message.IPackage].MoveNext () [0x00000] in <filename unknown>:0 
0 голосов
/ 03 декабря 2010

Нашел ответ, я попытался запустить MonoDevelop из Terminal (/Applications/MonoDevelop.app/Contents/MacOS/monodevelop), я увидел более подробную ошибку в командной строке при запуске модульных тестов.

Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for Npgsql.NpgsqlConnection ---> System.TypeLoadException: Could not load type 'System.Runtime.Versioning.TargetFrameworkAttribute' from assembly 'Npgsql'.
  at (wrapper managed-to-native) System.MonoCustomAttrs:GetCustomAttributesInternal (System.Reflection.ICustomAttributeProvider,System.Type,bool)
  at System.MonoCustomAttrs.GetCustomAttributesBase (ICustomAttributeProvider obj, System.Type attributeType) [0x00000] in <filename unknown>:0 
  at System.MonoCustomAttrs.GetCustomAttributes (ICustomAttributeProvider obj, System.Type attributeType, Boolean inherit) [0x00000] in <filename unknown>:0 
  at System.Reflection.Assembly.GetCustomAttributes (System.Type attributeType, Boolean inherit) [0x00000] in <filename unknown>:0 
  at System.Resources.ResourceManager.GetNeutralResourcesLanguage (System.Reflection.Assembly a) [0x00000] in <filename unknown>:0 
  at System.Resources.ResourceManager..ctor (System.Type resourceSource) [0x00000] in <filename unknown>:0 
  at Npgsql.NpgsqlConnection..cctor () [0x00000] in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (System.Reflection.MonoCMethod*,object,object[],System.Exception&)
  at System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 

Затем я попытался изменить версию Npgsql (та, которая вызывает ошибку, пришла с http://pgfoundry.org/frs/download.php/2868/Npgsql2.0.11-bin-ms.net4.0.zip) до http://pgfoundry.org/frs/download.php/2860/Npgsql2.0.11-bin-mono2.0.zip После этого Unix transport error ^ _ ^ больше нет

Извлеченный урок, используйте Mono-версию компонента, который вы используете, если вы работаете с Mono

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...