/var/log/messages

Apr 28, 2019 - 1 minute read - Comments - misc

Property-Based Testing with PropEr, Erlang, Elixir

GW 内読了? を目指したい。

とりあえず Chapter 1 の Foundations of Property-Based Tesing の章から読み始め。

導入

は以下にて。

Cloud Shell から apt-get install したら erlang のバージョン古いみたいで上の方法でないと駄目みたいです。

とりあえず

mix.exs を以下に修正して

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
      # {:dep_from_hexpm, "~> 0.3.0"},
      # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
      {:propcheck, "~> 1.1", only: [:test, :dev]}
    ]
  end
  • mix deps.get して
  • mix test が動いた

状態です。

Running a Property

Cloud Shell ってエディタ付属なんスね。でも、起動したら接続もリセットされちゃって環境設定イチからしなきゃ、な事態にorz

仕方が無いので以下なスクリプトを $HOME に保存。

#/bin/bash

sudo dpkg -i ~/erlang-solutions_1.0_all.deb
sudo apt-get update
sudo apt-get install esl-erlang
sudo apt-get install elixir

でびあんパケジは $HOME (永続ストレージ) にあるので大丈夫のはず。あと propcheck なナニも pbt/ 配下に導入されているようで、都度 mix deps.get しなくても良いみたいです。

テストの例として test/pbt_test.ex を以下に、とのこと。

defmodule PbtTest do
  use ExUnit.Case
  use PropCheck

  property "always works" do
    forall type <- term() do
      boolean(type)
    end
  end

  def boolean(_) do
    true
  end
end

実行してみるに以下な出力。

$ mix test
.
Finished in 0.1 seconds
1 property, 0 failures
Randomized with seed 23462

現時点で何してるのか、が今一つ理解できていないのですが boolean は常に true を戻すので、なのかどうか。term() が謎です。

とりあえず

このまんま次、に進んでしまって良いのかどうか。