2016-03-07 24 views
0

我想單元測試一個相當簡單的應用程序,我已經做了一個處理,但我運行測試時得到一個非常奇怪的錯誤。單元測試項目奧爾良文件沒有發現異常

我所做的只是:

  • 創建一個新的類庫
  • 添加引用Microsoft.Orleans.TestingHostMicrosoft.Orleans.OrleansProviders兩個版本1.1.2
  • 運行測試,並獲得file not found exception

測試文件看起來像這樣:

[TestFixture] 
public class HelloWorldTests : TestingSiloHost 
{ 
    //public HelloWorldTests() 
    // : base(new TestingSiloOptions 
    //   { 
    //    SiloConfigFile = new FileInfo(@"C:\_Foo\Host\Tests\OrleansConfigurationForTesting.xml") 
    //   }, 
    //   new TestingClientOptions 
    //   { 
    //    ClientConfigFile = new FileInfo(@"C:\_Foo\Host\Tests\ClientConfigurationForTesting.xml") 
    //   }) 
    //{ 
    //} 

    [Test] 
    public async Task When() 
    { 
     var grain = GrainFactory.GetGrain<IHelloGrain>(0); 
     var reply = await grain.SayHello("Hello"); 

     Assert.That(reply, Is.EqualTo("Hello World")); 
    } 
} 

^^從上面我甚至試圖硬編碼配置文件的位置。

堆棧跟蹤(有趣的是其尋找的配置文件在我應用程序數據文件夾

OneTimeSetUp: System.Exception : Exception during test initialization: 
Exc level 0: System.Runtime.Serialization.SerializationException: Type is not resolved for member 'Orleans.Runtime.Silo+SiloType,OrleansRuntime, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. 
    at System.AppDomain.CreateInstanceFromAndUnwrap(String assemblyFile, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) 
    at Orleans.TestingHost.TestingSiloHost.LoadSiloInNewAppDomain(String siloName, SiloType type, ClusterConfiguration config, AppDomain& appDomain) 
    at Orleans.TestingHost.TestingSiloHost.StartOrleansSilo(SiloType type, TestingSiloOptions options, Int32 instanceCount, AppDomain shared) 
    at Orleans.TestingHost.TestingSiloHost.<InitializeAsync>d__16.MoveNext() 

Exception doesn't have a stacktrace 

OneTimeSetUp: System.Exception : Exception during test initialization: 
Exc level 0: System.IO.FileNotFoundException: Could not find file 'C:\Users\***\AppData\Local\JetBrains\Installations\ReSharperPlatformVs12\OrleansConfigurationForTesting.xml'. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 
    at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost) 
    at System.IO.StreamReader..ctor(String path) 
    at System.IO.File.OpenText(String path) 
    at Orleans.Runtime.Configuration.ClusterConfiguration.LoadFromFile(String fileName) 
    at Orleans.TestingHost.TestingSiloHost.StartOrleansSilo(SiloType type, TestingSiloOptions options, Int32 instanceCount, AppDomain shared) 
    at Orleans.TestingHost.TestingSiloHost.<InitializeAsync>d__16.MoveNext() 

Exception doesn't have a stacktrace 

OneTimeSetUp: System.Exception : Exception during test initialization: 
Exc level 0: System.Runtime.Serialization.SerializationException: Type is not resolved for member 'Orleans.Runtime.Silo+SiloType,OrleansRuntime, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. 
    at System.AppDomain.CreateInstanceFromAndUnwrap(String assemblyFile, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) 
    at Orleans.TestingHost.TestingSiloHost.LoadSiloInNewAppDomain(String siloName, SiloType type, ClusterConfiguration config, AppDomain& appDomain) 
    at Orleans.TestingHost.TestingSiloHost.StartOrleansSilo(SiloType type, TestingSiloOptions options, Int32 instanceCount, AppDomain shared) 
    at Orleans.TestingHost.TestingSiloHost.<InitializeAsync>d__16.MoveNext() 

Exception doesn't have a stacktrace 
+0

在Visual Studio中,右鍵單擊Solution Explorer中的配置文件,進入屬性,並確保「複製到輸出目錄」屬性**沒有設置**爲「不要複製」 –

回答

1

有點老了,但值得來這裏......

這是NUnit的和/或其VS適配器的怪癖。

Orleans掃描當前目錄中的文件,但NUnit將其設置在其他地方,沒有任何預期文件存在。

因此,您必須在Orleans啓動之前自行設置當前目錄。

把這樣的事情在你測試的命名空間:

[SetUpFixture] 
public class PreFixture 
{ 
    [OneTimeSetUp] 
    public void SetUp() { 
     Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); 
    } 

} 
2

精神分裂,

如果您正在使用MSTest的框架,只需添加[DeploymentItem("missing_file_or_dll_name")]它抱怨每個項目。如果你使用的是xunit,那麼所引用的DLL應該被複制到輸出目錄,並且所有額外的文件(如配置文件)應該被設置爲「Copy To Output」。 10讓我知道你是否需要別的東西。

+0

「TestFixture」屬性意味着他們使用的是nunit。 –