标签: mspec

当由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
查看次数

无法使用Syste.Data.SQLite.dll x86运行mspec.exe,但它可以在R#MSpec运行器中运行

我使用mspec进行测试,并在测试中使用SQLite x86进行NHiernate安装.问题是,当我使用mspec r#runner运行我的测试时,一切正常但从控制台运行它会发现一个错误,它无法找到sqlite dll.

我的规范项目配置:

.net 4

x86(使用x86版本的sqlite)

System.Data.SQLite,Version = 1.0.64.0,Culture = neutral,PublicKeyToken = db937bc2d44ff139 mspec,Version = 0.3.0.0,Culture = neutral,PublicKeyToken = null,target runtime:v4.0.30319,target:x86

MSpec是从源代码构建的.在Reflector中,mspec.exe显示为为x86构建 - 这似乎适合我的设置,并且所述测试使用r#runner正常运行.

NHibernate.HibernateException:无法从NHibernate.Driver.SQLite20Driver,NHibernate,Version = 2.1.2.4000,Culture = neutral,PublicKeyToken = aa95f207798dfdb4创建驱动程序.---> System.Reflection.TargetInvocationException:调用目标抛出了异常.---> NHibernate.HibernateException:找不到程序集System.Data.SQLite中的IDbCommand和IDbConnection实现.确保程序集System.Data.SQLite位于应用程序目录或全局程序集缓存中.如果程序集位于GAC中,请使用应用程序配置文件中的元素指定程序集的全名.在NHibernate.Driver.SQLite20Driver..ctor()的NHibernate.Driver.ReflectionBasedDriver..ctor(String driverAssemblyName,String connectionTypeName,String commandTypeName)

有谁知道如何解决这个问题?

感谢提前和多云维也纳的问候,

克里斯

.net sqlite resharper mspec

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

如何防止 ReSharper 在我的 MSpec 字段之间插入空行?

当我编写这样的 MSpec 上下文时:

[Subject(typeof(TheType), "Concern")]
internal class when_this_test_is_run
    {
    Establish context = () =>
        {
        // some code...
        };

    Because of = () => Do.Something();
    It should_do_this;
    It should_do_that;
    }
Run Code Online (Sandbox Code Playgroud)

当我让 ReSharper 重新格式化代码时,它总是在任何作为匿名方法的委托下方插入一个空行,即以块{作为}其主体。它不会在简单表达式的委托后面插入空行。因此,在上面的示例中,Establish context委托会生成一个空行,但Because ofIt委托不会。

这让我发疯,因为我不希望它插入空行,但我不知道需要更改什么设置来阻止它发生。

有任何想法吗?

c# resharper code-formatting mspec

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

是否有null版本但列表?

我有一个单元测试我想写.

我将此部分作为工作版本的一部分:

List<MyClass> queryResult = new List<MyClass>(){};

A.CallTo(() => _dataContext.GetAll<MyClass>()).Returns(queryResult.AsQueryable());
Run Code Online (Sandbox Code Playgroud)

但是,我宁愿使用"null"而不是"queryResult.AsQueryable()"之类的东西,那么就没有必要创建一个空列表.

但GetAll将根据事物的外观返回一个空或满的列表.因此,null将不起作用.

是否有类似"List.Empty"的东西我可以使用?

谢谢

c# null generic-list mspec

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