问题标签 [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.

0 投票
1 回答
143 浏览

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 设置中的位置?

提前致谢。

0 投票
5 回答
3864 浏览

c# - 预期异常时应用 Arrange-Act-Assert 模式的最佳方法

在编写单元测试时,我试图遵循 Arrange-Act-Assert 模式,但我对哪种方法会更好感到困惑。我正在使用 xUnit,我解决问题的第一种方法是:

我的第二种方法是:

哪个是更好的方法?

编辑:在 wp.me/p4f69l-3z 上写博客

0 投票
2 回答
110 浏览

c# - 有没有办法缓存 Arg.Is<> 定义以在测试的“排列”和“动作”部分中使用?

我有一个看起来像这样的测试:

我想将Arg定义缓存在局部变量中,以便可以在断言中重用它。关键是减少测试中的代码量并使其阅读起来更加流畅。

这似乎不起作用,因为 的值为transitionForThing空,因此断言失败,说Received(null)没有被调用。有没有办法做到这一点或类似的事情,还是我坚持这种语法?

0 投票
2 回答
2285 浏览

c# - 使用 Arrange-Act-Assert 进行单元测试时是否建议使用标题注释?

我发现 AAA 模式中建议的对单元测试语句进行分区的概念很有用。

我倾向于添加标题注释,以便测试如下所示:

但我很好奇,总是包含这些标题注释是否正常?

...或者这是我应该避免的事情?

0 投票
2 回答
1052 浏览

justmock - JustMock - 如何通过返回另一个类的等效方法的结果来模拟所有实例的方法(共享一个公共接口

我正在使用 .NET 4.5、EF6,并且正在尝试使用 JustMock 2.0 来测试我的应用程序。

我试图通过模拟我的DbContext子类来模拟我的数据库:CoreDataRepositoryContext

为此,我需要通过返回一个假数据集合来模拟DbContext的成员SaveChanges和我的类CoreDataRepositoryContext的每个DbSet类型属性。我还需要模拟以下DbSet的成员:

  • 添加
  • 消除
  • 可查询的

我需要为CoreDataRepositoryContextDbSet的所有实例模拟它

例如,我在数据库中有Order类型的实体(表Orders)我做了以下模拟表Orders

mockedContext.Orders属于DbSet< Order >类型,而 FakeOrders 属于List< Order >类型。这两个类都实现了接口IEnumerable< Order >

模拟AddRemove成员效果很好,因为这两种方法都没有在接口IEnumerable< T >中声明。

另一方面,AsQueryable在此接口中声明并由Queryable定义。因此,当我使用IgnoreInstance模拟成员时,从实现IEnumerable< T >的任何类的实例调用AsQueryable 会启动一个永无止境的循环。因为IEnumerable< Order >.AsQueryableFakeOrders.AsQueryable嘲笑,而 FakeOrders.AsQueryable被... FakeOrders.AsQueryable ...无限循环...

我怎样才能只模拟DbSet< Order >.AsQueryable,而不使用IgnoreInstance 模拟IEnumerable< Order > .AsQueryable

感谢您的帮助 :)

0 投票
2 回答
992 浏览

unit-testing - 在 Arrange-Act-Assert 测试风格中,是否可以将 Act 移到 beforeEach/setUp 块中?

在对单个逻辑操作的结果和/或副作用进行单元测试时,如何保持代码 DRY?以 Jasmine 编写的以下示例为例:

请注意重复的 Act 以及对 的调用frobnicate(foo)。使用允许嵌套描述上下文(例如 Jasmine)的单元测试框架,按照以下方式重构测试似乎很自然:

这种风格与 AAA 测试风格有任何矛盾吗?以这种方式重构代码会引发其他问题吗?

0 投票
1 回答
195 浏览

c# - AAA- 单元测试文件 IO - 日志记录

我正在为程序编写自定义记录器。我尽可能多地使用 NLog。我正在寻找验证功能并使用 AAA 模式编写了一些单元测试。

然而,这导致了 Assert 的问题......我怎么能/Whats 发生了断言文件写入的最佳方法......并且它正确地写了出来。

我的意思是我可以做一个 file.read 来获取最后一行,并断言它等于写出的参数......我只是不知道这是否违背了 AAA 的目的......

0 投票
2 回答
487 浏览

java - 通过断言对 getter 的代码覆盖

在进行单元测试时,有没有办法仅在某些步骤中启用代码覆盖分析?

我希望测量测试断言部分的代码覆盖率。如果在测试的操作部分或断言部分执行该行,我目前使用的工具不会产生影响。

因此,我无法检查我的 bean 的所有 getter 是否都被 assert 方法读取。理想情况下,我只想在我的一些方法执行期间激活覆盖措施。

代码示例:

目前,我使用的报告工具比 getA 和 getB 都涵盖了。我想要一种方法来检测getB 没有被assertMethod 读取。

我使用 Java 和 IntelliJ,我的测试类遵循 Arrange-Act-Assert 语法。

0 投票
3 回答
140 浏览

c# - 我正在学习单元测试,想知道这个单元测试程序流程是否正确?如安排,行动,断言

我正在学习单元测试,想知道这个单元测试程序流程(如 Arrange、Act、Assert)是否正确?

0 投票
1 回答
1082 浏览

unit-testing - Arrange、Act、Assert 模式中的 Arrange 和 Act 有什么区别?

我真的不明白单元测试中模式的排列部分和行为部分之间的区别。排列是否仅意味着对象的创建?为什么我们首先要将 Arrange 与 Act 部分分开,以及决定某物属于 Act 而不是 Arrange 部分的标准是什么?对我来说,似乎一切都属于安排部分,因为我们为断言“安排测试”,不是吗?