Tag: mspec

当需要静态成员/方法时,如何在MSpec中强制执行测试隔离?

好。 我试图解决为什么MSpec使用静态方法/变量。 (不完全是静态方法,但是使用成员变量委托,它实际上是相同的)。 这使得无法重用上下文。 那或通过并确保手动重置所有静态变量。 这在测试隔离上没有强制执行。 如果一个测试设置了一些变量而下一个测试就检查了它,那么当它不应该传递时它会通过。 这开始变得非常烦人。 我在一个“因为”语句中所做的只是留在那里,而不是仅仅因为它共享相同的上下文而进行到所有其他随机测试。 编辑- 问题是,我如何“ENFORCE”测试隔离。 例如,查看下面的规范,共享FooContext 。 如果should_not_throw通过,我们会猜测should_not_throw吗? public class FooContext { Establish context = () => Subject = new Foo(); public static Foo Subject; public static int result; public static Exception ex; } public class When_getting_an_int_incorrectly : FooContext { Because of = () => ex = Exception.Catch(() => […]

MSpec:如何使静态变量线程安全?

我正在使用MSpec作为我的最新项目,总的来说我对它非常满意。 但是,当我的测试以并行方式运行时,我确实遇到并发问题,我想知道是否有人遇到过这个问题,或者更好的是,有一个解决方案? MSpec严重依赖静态方法和变量来工作。 现在,当我在我的基类中定义静态变量时,它会被多个测试类使用,并且我在paralel中运行我的测试,它们共享相同的静态变量,从而干扰彼此。 我正在使用NCrunch和Resharper作为我的测试人员,我遇到了两个问题。 有人熟悉这个问题吗?

FakeItEasy代理方法调用实际实现

我正在尝试将对虚假对象的调用代理到实际实现。 这样做的原因是我希望能够使用Machine.Specifications的WasToldTo和WhenToldTo,它仅适用于接口类型的伪造。 因此,我正在执行以下操作来代理对我的真实对象的所有调用。 public static TFake Proxy(TFake fake, TInstance instance) where TInstance : TFake { fake.Configure().AnyCall().Invokes(x => x.Method.Invoke(instance, x.Arguments.ToArray())); return fake; } 我会像这样使用它。 var fake = Proxy(A.Fake(), new SomeImplementation()); //in my assertions using Machine.Specifications (reason I need a fake of an interface) fake.WasToldTo(x => x.DoOperation()); 然而问题是这只适用于void方法,因为Invokes方法没有对返回值做任何事情。 (Action param代替Func) 然后我尝试使用WithReturnValue方法执行此操作。 public static TFake Proxy(TFake fake, TInstance […]

测试大型状态机有哪些策略?

我inheritance了一个庞大且相当复杂的状态机。 它有31种可能的状态,都是真正需要的(大业务流程)。 它有以下输入: 枚举:当前状态(所以0 – > 30) 枚举:来源(目前只有2个条目) 布尔值:请求 布尔值:类型 枚举:状态(3个州) 枚举:处理(3个州) 布尔值:已完成 将其分解为单独的状态机似乎不可行,因为每个状态都是不同的。 我为最常见的输入编写了测试,每个输入一个测试,所有输入都是常量,除了State。 [Subject(“Application Process States”)] public class When_state_is_meeting2Requested : AppProcessBase { Establish context = () => { //Setup…. }; Because of = () => process.Load(jas, vac); It Current_node_should_be_meeting2Requested = () => process.CurrentNode.ShouldBeOfType(); It Can_move_to_clientDeclined = () => Check(process, process.clientDeclined); It Can_move_to_meeting1Arranged = […]