单元测试项目orleans文件未找到异常

Unit testing project orleans 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"));
    }
}

^^ 从上面我什至尝试硬编码配置文件的位置。

堆栈跟踪(有趣的是它在我的 appdata 文件夹中寻找配置文件:

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

精神分裂症,

如果您使用的是 MSTest 框架,只需为它抱怨的每个项目添加 [DeploymentItem("missing_file_or_dll_name")]。如果您使用的是 xunit,则应将引用的 DLL 复制到输出目录,并且所有额外文件(如配置文件)应设置为“Copy To Output”。

如果您还需要什么,请告诉我。

有点旧,但值得来这里...

这是 NUnit and/or 它的 VS 适配器的一个怪癖。

Orleans 扫描当前目录中的文件,但 NUnit 将其设置在别处,其中 none 的预期文件存在。

因此您必须在 Orleans 启动之前自行设置当前目录。

在你的测试命名空间中放置类似这样的东西:

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

}