小编Dan*_*sen的帖子

当由mspec.exe运行时,规范失败,但在由TD.NET运行时传递

我在另一个问题上写过这个话题.

但是,我已经重构了我的代码以摆脱配置访问,从而允许规范通过.或者我想.它们使用TestDriven.Net在Visual Studio中运行良好.但是,当我使用mspec.exe工具在rake中运行它们时,它们仍会因序列化异常而失败.所以我创建了一个完全自包含的示例,除了在线程上设置虚假安全凭证之外基本上什么也没做.这个测试在TD.Net中正常通过,但在mspec.exe中爆炸了.有人有什么建议吗?

更新:我发现了解决方法.在研究了这个问题后,似乎原因是包含我的主要对象的程序集与mspec.exe不在同一个文件夹中.当mspec创建一个新的AppDomain来运行我的规范时,新的AppDomain必须使用主体对象加载程序集以反序列化它.该程序集与mspec EXE不在同一文件夹中,因此失败.如果我将我的程序集复制到与mspec相同的文件夹中,它可以正常工作.

我仍然不明白为什么ReSharper和TD.Net能够正常运行测试?他们不使用mspec.exe来实际运行测试吗?

using System;
using System.Security.Principal;
using System.Threading;
using Machine.Specifications;

namespace MSpecTest
{
    [Subject(typeof(MyViewModel))]
    public class When_security_credentials_are_faked 
    {
        static MyViewModel SUT;

        Establish context = SetupFakeSecurityCredentials;

        Because of = () =>
            SUT = new MyViewModel();

        It should_be_initialized = () =>
            SUT.Initialized.ShouldBeTrue();

        static void SetupFakeSecurityCredentials()
        {
            Thread.CurrentPrincipal = CreatePrincipal(CreateIdentity());
        }

        static MyIdentity CreateIdentity()
        {
            return new MyIdentity(Environment.UserName, "None", true);
        }

        static MyPrincipal CreatePrincipal(MyIdentity identity)
        {
            return new MyPrincipal(identity);
        }
    }

    public class MyViewModel
    {
        public MyViewModel() …
Run Code Online (Sandbox Code Playgroud)

resharper testdriven.net mspec

1
推荐指数
1
解决办法
803
查看次数

标签 统计

mspec ×1

resharper ×1

testdriven.net ×1