Elixir:
编写测试

如何操作:

Elixir使用ExUnit作为其内置测试框架,它既强大又易于使用。这里有一个基本例子:

  1. 在你的Elixir项目的test目录中创建一个新的测试文件。例如,如果您正在测试一个名为MathOperations的模块,您的测试文件可以是test/math_operations_test.exs
# test/math_operations_test.exs
defmodule MathOperationsTest do
  use ExUnit.Case

  # 这是一个简单的测试案例,以检查加法函数
  test "两个数字的加法" do
    assert MathOperations.add(1, 2) == 3
  end
end

要运行你的测试,请在终端中使用mix test命令。如果MathOperations.add/2函数正确地加了两个数字,你将看到类似以下的输出:

..

完成于0.03秒
1个测试, 0个失败

对于涉及外部服务或API的测试,你可能想使用模拟库,例如mox,以避免实际触及服务:

  1. mix.exs中将mox添加到你的依赖项:
defp deps do
  [
    {:mox, "~> 1.0.0", only: :test},
    # 其他依赖...
  ]
end
  1. 在你的测试助手中定义一个模拟模块(test/test_helper.exs):
Mox.defmock(HTTPClientMock, for: HTTPClientBehaviour)
  1. 在你的测试案例中使用模拟:
# test/some_api_client_test.exs
defmodule SomeAPIClientTest do
  use ExUnit.Case
  import Mox

  # 这告诉Mox验证此模拟是否如预期般被调用
  setup :verify_on_exit!

  test "从API获取数据" do
    # 设置模拟响应
    expect(HTTPClientMock, :get, fn _url -> {:ok, "模拟响应"} end)
    
    assert SomeAPIClient.get_data() == "模拟响应"
  end
end

当运行mix test时,此设置允许你将单元测试与真实的外部依赖隔离,专注于你自己代码的行为。这种模式确保你的测试运行迅速并保持可靠,无论外部服务状态或互联网连接如何。