gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 03:13:58 26 4
gpt4 key购买 nike

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

describe("frobnicate", function () {
var foo;

beforeEach(function () {
foo = getFoo();
});

it("causes side-effect 1", function () {
frobnicate(foo);

expect(sideEffect1).toEqual('you did it');
});

it("causes side-effect 2", function () {
frobnicate(foo);

expect(sideEffect2).toHaveBeenCalled();
});

/* side effect 3, 4, etc. */
});

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

describe("frobnicate", function () {
beforeEach(function () {
var foo = getFoo();

frobnicate(foo);
});

it("causes side-effect 1", function () {
expect(sideEffect1).toEqual('you did it');
});

it("causes side-effect 2", function () {
expect(sideEffect2).toHaveBeenCalled();
});

/* test side effect 3, 4, etc. */
});

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

最佳答案

这不仅与 Arrange-Act-Assert 不矛盾,而且我会坚持你这样做。测试中的重复是主要的维护问题之一,应尽可能去除。

关于重复要问的最大问题是“如果这个改变会发生什么?”,如果你必须在多个地方改变它,重构。

关于unit-testing - 在 Arrange-Act-Assert 测试风格中,是否可以将 Act 移动到 beforeEach/setUp block 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27605764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com