callmekohei's blog

callmekoheiのひとりごと

F#でお気楽にテスト!(Persimmon.Script編)

Summary

とにかく手間をかけずにテストしたい人

Persimmon.Scriptで決まり!

Persimmon.Scriptとは?

F#スクリプトお気楽にテストできるライブラリ〜

つまりはメンドくさがりな人向けのライブラリ〜

特徴

  1. とにかく手間がかからない

  2. お手軽なのでテストファースト的に使える
    (テスト書いて実行がサクサクできる)

  3. Travisなどのテストスクリプトも簡単にかける
    exe,dll依存をconfigファイルに書く必要がない)

使い方

まずはPersimmon.Scriptnugetしませう。

nuget persimmon.script

こんな感じのコードを書いてみる

/// Persimmonライブラリ一式をrequire and open
#r "./packages/Persimmon/lib/net45/Persimmon.dll"
#r "./packages/Persimmon.Runner/lib/net40/Persimmon.Runner.dll"
#r "./packages/Persimmon.Script/lib/net45/Persimmon.Script.dll"
open Persimmon
open UseTestNameByReflection

/// テストレポート出力用に必要
open System.Reflection

/// こんな感じでテストをかく
let myTest = test {
    do! assertEquals 1 2
}

/// テスト結果を出力
Script.testReport( fun _ -> Assembly.GetExecutingAssembly() )
|> stdout.WriteLine

結果

begin FSI_0001
 Assertion Violated: myTest
 1. Expect: 1
    Actual: 2
end FSI_0001
============================== summary ===============================
run: 1, error: 0, violated: 1, skipped: 0, duration: 00:00:00.0840830

本当にお手軽ですね!

さらに

従来だとexe, dllの依存関係をPersimmon.Console.exe.configファイルに

書かないといけませんでしたが、

Persimmon.Scriptだとその必要がないです。

よくわからないかもしれませんが

つまりはお手軽〜なのです。

こんな感じ

外部Dll

add10.fsx

namespace callmekohei

module Util =
    let add10 n =
        n + 10

これを $ fsahrpc -a add10.fsxとしてadd10.dllを作る

code
/// 外部dll(依存してるdll)をrequireするだけ!
#r "./add10.dll"
open callmekohei.Util

/// Persimmonライブラリ一式をrequire and open
#r "./packages/Persimmon/lib/net45/Persimmon.dll"
#r "./packages/Persimmon.Runner/lib/net40/Persimmon.Runner.dll"
#r "./packages/Persimmon.Script/lib/net45/Persimmon.Script.dll"
open Persimmon
open UseTestNameByReflection

/// テストレポート出力用に必要
open System.Reflection

/// テストを書く
let myTest = test {
    do! assertEquals 1 ( add10 1 )
}

/// テスト結果を出力
Script.testReport( fun _ -> Assembly.GetExecutingAssembly() )
|> stdout.WriteLine

結果

begin FSI_0005.MyTest_deoplete-fsharp_temporary_file
Assertion Violated: myTest
1. Expect: 1
Actual: 11
end FSI_0005.MyTest_deoplete-fsharp_temporary_file
============================== summary ===============================
run: 1, error: 0, violated: 1, skipped: 0, duration: 00:00:00.0687324

本当にお手軽ですね!

感想

本当に便利なライブラリをありがとうございます!!!

参考

Persimmon.Scriptはここからナゲット!(ダウンロード)

NuGet Gallery | Packages matching persimmon.script

開発に参加したい・要望がある〜という人はこちら

github.com