🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
9-文档、测试和管道 ================ 本章我们将实现“解析”功能,来解析在第一章提到的命令行操作指令(还记得吗?我们在写一个简易redis!): ```elixir CREATE shopping OK PUT shopping milk 1 OK PUT shopping eggs 3 OK GET shopping milk 1 OK DELETE shopping eggs OK ``` 解析功能完成后,我们会把代码更新到之前创建的```:kv```程序里面去。 ## 文档测试(Doctests) >Doctest常见于python,ruby等语言,是一种基于代码注释文档书写单元测试的方法。 用特定的语法为函数或方法书写注释,用doctest命令执行这些文档测试代码。 >注意:为了保证代码简洁,不能完全用doctest代替传统的单元测试代码 在语言官网首页,我们说Elixir视代码中的文档标记为语言中的一等公民。在文档手册中,我们也多次涉及这个概念。 比如经常在IEx命令行中执行```mix help```,以及输入```h Enum```或```h``` + 其他模块名字。 本章中,我们在实现上文所说“解析”功能的时候,引入文档注释的内容。它能够让我们直接通过代码的文档注释写测试, 有助于我们在文档注释中写出更准确的sample。 现在来创建我们的解析功能函数```lib/kv_server/command.ex```。先写doctest: ```elixir defmodule KVServer.Command do @doc ~S""" Parses the given `line` into a command. ## Examples iex> KVServer.Command.parse "CREATE shopping\r\n" {:ok, {:create, "shopping"}} """ def parse(line) do :not_implemented end end ``` Doctests规定的书写形式:在4空格缩进之后的```iex>```提示符后。 如果一个命令不止一行,则在除第一行的其它行用```...>```代替```iex>```字样。 命令的结果则写在```iex>```或```...>```的下一行,后面以一个新行或者下一个新的```iex>```行结束。 同时注意,我们写注释文档时用```@doc ~S"""```起头。```~S```可以保证文档里写的```/r/n```不会在执行doctests测试前被转义成回车。 执行doctets,我们先创建一个测试脚本```test/kv_server/command_test.exs```, 在用例中调用```doctest KVServer.Command```: ```elixir defmodule KVServer.CommandTest do use ExUnit.Case, async: true doctest KVServer.Command end ```