gpt4 book ai didi

testing - exunit 测试用例的可覆盖宏

转载 作者:行者123 更新时间:2023-11-28 20:37:30 26 4
gpt4 key购买 nike

我正在为我的应用程序编写测试用例,我的大部分 Controller 都包含 CRUD 的通用代码,因此我编写了通用宏并在我的 Controller 中使用它。所有 Controller 的测试用例都将自动编写。但是我对如何使这个通用代码可重写感到困惑,以便我可以随时重写。

defmodule Qserv.ControllerTest do
defmacro __using__(_options) do
quote location: :keep do
use Qserv.Web.ConnCase, async: true
# this kernel will give me access to current `@model` and `@controller`
use Qserv.KernelTest

describe "#{@controller}.create/2" do
test "All required fields set `required` in model should generate errors that these fields are missing -> One, two, All"

test "Only required fields should create record and match the object"
end

# defoverridable index: 2, I want to override above `describe` completely or/and the included test cases
end
end
end

任何帮助/想法如何实现这一目标?

最佳答案

我通常不喜欢“让我们稍后再做一些事情来撤消它”。它通常会迫使开发人员在他们的头脑中保留一个堆栈,以了解以后如何添加和删除内容。

特别是在这种情况下,您要耦合测试名称。想象一下,有人决定将“一、二、全部”中的“二”变成大写。现在所有 future 的覆盖都将不适用,您将有重复的测试。

明确选择所需内容的更好解决方案。例如,您可以定义在必要时使用的更小的宏:

describe_create!
describe_update!
...
describe_delete!

也许您可以使用 describe_restful! 来调用所有这些。这里的教训是在其上构建小的构建 block ,而不是稍后尝试分解的大块。

PS:请使用比我使用的 describe_x 更好的名称。 :)

关于testing - exunit 测试用例的可覆盖宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48759626/

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