Tag: bdd

当需要静态成员/方法时,如何在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作为我的测试人员,我遇到了两个问题。 有人熟悉这个问题吗?

SpecFlow – 从方法步骤查找所有方案并查找所有未实现的步骤

SpecFlow新手。 当specs项目变得更大时,组织文件并重构Given / When / Then字符串变得麻烦。 如何从方法步骤中查找要素文件中的方案。 有时我会在一些场景和function中共享一些步骤,但是从C#步骤方法查看如何在function文件中“查找所有引用”? 如何在所有function文件中获取所有未实现的场景步骤(字体颜色为紫色),以便我可以实现这些步骤。 目前,当我Run All测试时,没有关于未实现的步骤的警告。

白色UIAutomation click()停止在不同平台上工作

我正在使用White来自动化我们的C#WPF UI的BDD测试。 我的第一个测试在我的开发机器上运行良好(运行Windows 7)。 但是,当我尝试在构建服务器(运行Windows Server 2003 R2的虚拟机)上运行相同的代码时,它无法正常工作。 在这两种情况下,测试都是从命令行运行的,测试使用的是Cuke4Nuke框架。 在服务器的情况下,我通过远程桌面连接访问服务器。 代码如下: var application = Application.Launch(“whiteApp.exe”); var initializeOption = InitializeOption.NoCache; var windowCriteria = SearchCriteria.ByText(“whiteApp”); var window = application.GetWindow(criteria, initializeOption); var criteria = SearchCriteria.ByAutomationId(“rightButton”); var button = (Button) window.Get(criteria); button.click(); 问题是在服务器上运行按钮单击事件时不会触发它。 如果在白方执行完毕后UI处于打开状态,则可以单击该按钮(使用鼠标)。 一个有趣的观点是,在运行click方法之后,按钮确实显示了被点击的证据,如下图所示,在其他按钮的情况下,显示了鼠标hover效果。

Specflow使用具有场景上下文的表中的参数

我在C#中使用Specflow来使用Selenium构建自动客户端浏览器测试。 这些测试的目标是模拟客户在特定页面中进入我们网站的业务场景,然后将其定向到正确的页面。 我想在场景上下文中使用参数,例如: When I visit url | base | page | parameter1 | parameter2 | | http://www.stackoverflow.com | questions | | | Then browser contains test Examples: | | | | 123 | specflow-q1 | | 456 | specflow-q2 | | 789 | specflow-q3 | 注意 :步骤“当我访问url”时需要base + page + parameter1 + parameter2,创建url“base / […]

如何测试使用xUnit,SubSpec和FakeItEasy抛出的exception

我正在使用xUnit,SubSpec和FakeItEasy进行unit testing。 到目前为止,我已经创建了一些积极的unit testing,如下所示: “Given a Options presenter” .Context(() => presenter = new OptionsPresenter(view, A.Ignored, service)); “with the Initialize method called to retrieve the option values” .Do(() => presenter.Initialize()); “expect the view not to be null” .Observation(() => Assert.NotNull(view)); “expect the view AutoSave property to be true” .Observation(() => Assert.True(view.AutoSave)); 但是现在我想写一些负面unit testing并检查某些方法是否被调用,并抛出exception 例如 “Given a […]

学习BDD,TDD(ruby,C#,javascript)的好资源

学习BDD和TDD的好资源是什么(ruby,C#,javascript)。 现在使用的好框架是什么?

SpecFlow和复杂对象

我正在评估SpecFlow ,我有点卡住了。 我发现的所有样品基本上都是简单的物体。 我正在开发的项目严重依赖于复杂的对象。 一个接近的样本可能是这个对象: public class MyObject { public int Id { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public IList Children { get; set; } } public class ChildObject { public int Id { get; set; } public string Name { get; set; […]

如何将Spec-flow表数据转换为不同的值

我需要转换通过table.CreateInstance()或table.CreateSet()获得的Spec-flow表数据。 我正在使用Spec流进行数据库测试,在某些情况下,Table字段值需要映射到不同的值,因为DB表存储代码而不是我们在function文件表中输入的值。 我不想在function文件中包含代码,因为它会降低可读性。 例如,如果我已经输入Single for status,如下所述,我希望它在数据传输对象/ POCO中映射或转换为S. 什么是最好的方法? 提前致谢。 Given I entered the following data into the new account form: | Name | Birthdate | Status | | John Butcher| 2/2/1902 | Single |

适用于C#NUnit的BDD

我一直在使用家庭酿造的BDD Spec扩展来在NUnit中编写BDD样式测试,我想看看每个人都在想什么。 它增加了价值吗? 真是太糟糕了? 如果是这样的话? 那里有更好的东西吗? 这是源: https : //github.com/mjezzi/NSpec 我创建这个有两个原因 使我的测试易于阅读。 产生简单的英语输出以查看规格。 以下是测试外观的示例: – 这些天僵尸似乎很受欢迎.. 鉴于Zombie,Peson和IWeapon: namespace Project.Tests.PersonVsZombie { public class Zombie { } public interface IWeapon { void UseAgainst( Zombie zombie ); } public class Person { private IWeapon _weapon; public bool IsStillAlive { get; set; } public Person( IWeapon weapon ) { […]