gpt4 book ai didi

unit-testing - 使用 eunit 编写 Erlang 单元测试的最佳实践/约定

转载 作者:行者123 更新时间:2023-12-03 10:14:56 27 4
gpt4 key购买 nike

我目前正在学习 Erlang,想知道单元测试有哪些好的实践或约定?我目前正在使用eunit。

提出这个问题:

  • 我目前正在为每个函数编写一个单元测试模块,这样我的测试名称就很简单了,并且采用了 should_do_desired_behaviour_test() 的形式。
  • 我开始为我正在编写的每个模块使用一个模块,但感觉不对,因为命名测试变得越来越笨拙,并且测试模块感觉杂乱无章。
  • 我所采用的方法所预见的问题是,我最终会得到许多需要执行的模块。然后我需要某种全局模块来运行每个测试模块中的所有测试。

  • 所以我想我不太确定要采取什么方法,或者我是否在正确的轨道上。您通常如何管理单元测试?

    干杯。

    最佳答案

    迄今为止最常见的方法是每个应用程序模块一个测试模块。如果你正确命名你的模块,EUnit 会为你找到并运行你所有的测试,不需要创建一个运行测试的全局模块。例如,给定:

  • 源/
  • meck.erl
  • meck_mod.erl
  • 测试/
  • meck_tests.erl
  • meck_mod_tests.erl

  • 如果你运行 eunit:test(meck)它将检测(如果在您的路径上)模块 meck_tests并运行 meck_tests:test() . test()当你包含 eunit.hrl 时,EUnit 会自动将函数插入到模块中。 .

    至于命名约定,我通常会得出以下结论:
    -module(my_tests).

    -export([functiona_should_do_this/0]).
    -export([functionb_should_do_that/0]).
    -export([functionb_should_not_crash/0]).
    % etc

    如果您希望在测试运行中出现好的名称,请使用 EUnit 的测试生成器功能:
    all_my_test_() ->
    [{"Should not break X", fun first_test/0},
    {"Should perform Y", fun other_test/0}].

    任何以 test_ 结尾的函数告诉 EUnit 它应该返回一个测试列表(这称为测试生成器)。测试列表可以只包含一个乐趣列表、一个元组列表,其中第一个元素是测试的字符串描述,或者更复杂的设置:
    advanced_test_() ->
    {foreach, fun setup/0, fun teardown/1,
    [{"Assert X", fun test1/0}]}.

    这将运行 setup/0在每个测试用例之前,和 teardown/1在每个测试用例之后。 teardown/1 的参数是来自 setup/0 的返回值.您可以随意命名这些函数。

    有关于如何使用 EUnit 的综合文档 available here .

    这是我的测试模块的样子: https://github.com/eproxus/meck/blob/master/test/meck_tests.erl

    关于unit-testing - 使用 eunit 编写 Erlang 单元测试的最佳实践/约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6449681/

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