问题标签 [arrange-act-assert]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Given-When-Then 处理用户输入时
我正在寻找有关 Arrange/Act/Assert 的一些说明,我在开发过程中将其作为 Given-When-Then 实施。我试图坚持这个概念,但我发现在某些事件(特别是用户输入)期间,我必须重新考虑将“Act”动作作为“Arrange”动作,以便在单元测试中正确捕获它. 我在这里使用Moq作为我的模拟框架。
例如:在我的项目中,代码的焦点是用户提供的图像。存在用户可以选择图像的功能,但如果图像已经存在,它将询问用户是否要替换活动图像,或者取消操作并保留活动图像。我觉得编写这个特定场景的正确方法是:
给定一个已经存在图像的工作区
当用户请求新图像
并且用户选择替换活动图像
然后程序应该替换图像
Testwise,它看起来像这样:
Codewise,在我的演示者中,它看起来像这样:
但这失败了,因为消息框是在调用Setup
视图之后发生的Raise
。因此,我需要Setup
在它之前移动它(并且使用Setup
让它感觉就像一个“排列”设置):
给定一个已经存在图像的工作区
并且用户选择替换活动图像
当用户请求新图像时
,程序应该替换图像
但现在,我的场景感觉不正常,而且流程不正确。我觉得用户选择替换图像(the Setup
),因为它发生在用户选择添加新图像(the Raise
)之后,应该是 Act 步骤的一部分,但为了让它正确模拟,我需要把它放在排列步骤中。
我在这里使用了错误的模拟框架吗?有一个更好的方法吗?还是我不切实际地担心用户输入步骤在 Given-When-Then 设置中的位置?
提前致谢。
c# - 预期异常时应用 Arrange-Act-Assert 模式的最佳方法
在编写单元测试时,我试图遵循 Arrange-Act-Assert 模式,但我对哪种方法会更好感到困惑。我正在使用 xUnit,我解决问题的第一种方法是:
我的第二种方法是:
哪个是更好的方法?
编辑:在 wp.me/p4f69l-3z 上写博客
c# - 有没有办法缓存 Arg.Is<> 定义以在测试的“排列”和“动作”部分中使用?
我有一个看起来像这样的测试:
我想将Arg
定义缓存在局部变量中,以便可以在断言中重用它。关键是减少测试中的代码量并使其阅读起来更加流畅。
这似乎不起作用,因为 的值为transitionForThing
空,因此断言失败,说Received(null)
没有被调用。有没有办法做到这一点或类似的事情,还是我坚持这种语法?
c# - 使用 Arrange-Act-Assert 进行单元测试时是否建议使用标题注释?
我发现 AAA 模式中建议的对单元测试语句进行分区的概念很有用。
我倾向于添加标题注释,以便测试如下所示:
但我很好奇,总是包含这些标题注释是否正常?
...或者这是我应该避免的事情?
justmock - JustMock - 如何通过返回另一个类的等效方法的结果来模拟所有实例的方法(共享一个公共接口
我正在使用 .NET 4.5、EF6,并且正在尝试使用 JustMock 2.0 来测试我的应用程序。
我试图通过模拟我的DbContext子类来模拟我的数据库:CoreDataRepositoryContext。
为此,我需要通过返回一个假数据集合来模拟DbContext的成员SaveChanges和我的类CoreDataRepositoryContext的每个DbSet类型属性。我还需要模拟以下DbSet的成员:
- 添加
- 消除
- 可查询的
我需要为CoreDataRepositoryContext和DbSet的所有实例模拟它
例如,我在数据库中有Order类型的实体(表Orders)我做了以下模拟表Orders:
mockedContext.Orders属于DbSet< Order >类型,而 FakeOrders 属于List< Order >类型。这两个类都实现了接口IEnumerable< Order >。
模拟Add和Remove成员效果很好,因为这两种方法都没有在接口IEnumerable< T >中声明。
另一方面,AsQueryable在此接口中声明并由Queryable定义。因此,当我使用IgnoreInstance模拟成员时,从实现IEnumerable< T >的任何类的实例调用AsQueryable 会启动一个永无止境的循环。因为IEnumerable< Order >.AsQueryable被FakeOrders.AsQueryable嘲笑,而 FakeOrders.AsQueryable被... FakeOrders.AsQueryable ...无限循环...
我怎样才能只模拟DbSet< Order >.AsQueryable,而不使用IgnoreInstance 模拟IEnumerable< Order > .AsQueryable?
感谢您的帮助 :)
unit-testing - 在 Arrange-Act-Assert 测试风格中,是否可以将 Act 移到 beforeEach/setUp 块中?
在对单个逻辑操作的结果和/或副作用进行单元测试时,如何保持代码 DRY?以 Jasmine 编写的以下示例为例:
请注意重复的 Act 以及对 的调用frobnicate(foo)
。使用允许嵌套描述上下文(例如 Jasmine)的单元测试框架,按照以下方式重构测试似乎很自然:
这种风格与 AAA 测试风格有任何矛盾吗?以这种方式重构代码会引发其他问题吗?
c# - AAA- 单元测试文件 IO - 日志记录
我正在为程序编写自定义记录器。我尽可能多地使用 NLog。我正在寻找验证功能并使用 AAA 模式编写了一些单元测试。
然而,这导致了 Assert 的问题......我怎么能/Whats 发生了断言文件写入的最佳方法......并且它正确地写了出来。
我的意思是我可以做一个 file.read 来获取最后一行,并断言它等于写出的参数......我只是不知道这是否违背了 AAA 的目的......
java - 通过断言对 getter 的代码覆盖
在进行单元测试时,有没有办法仅在某些步骤中启用代码覆盖分析?
我希望测量测试断言部分的代码覆盖率。如果在测试的操作部分或断言部分执行该行,我目前使用的工具不会产生影响。
因此,我无法检查我的 bean 的所有 getter 是否都被 assert 方法读取。理想情况下,我只想在我的一些方法执行期间激活覆盖措施。
代码示例:
目前,我使用的报告工具比 getA 和 getB 都涵盖了。我想要一种方法来检测getB 没有被assertMethod 读取。
我使用 Java 和 IntelliJ,我的测试类遵循 Arrange-Act-Assert 语法。
c# - 我正在学习单元测试,想知道这个单元测试程序流程是否正确?如安排,行动,断言
我正在学习单元测试,想知道这个单元测试程序流程(如 Arrange、Act、Assert)是否正确?
unit-testing - Arrange、Act、Assert 模式中的 Arrange 和 Act 有什么区别?
我真的不明白单元测试中模式的排列部分和行为部分之间的区别。排列是否仅意味着对象的创建?为什么我们首先要将 Arrange 与 Act 部分分开,以及决定某物属于 Act 而不是 Arrange 部分的标准是什么?对我来说,似乎一切都属于安排部分,因为我们为断言“安排测试”,不是吗?