README.md in rgot-0.0.2 vs README.md in rgot-0.0.3

- old
+ new

@@ -1,12 +1,14 @@ rgot === [![Build Status](https://travis-ci.org/ksss/rgot.svg)](https://travis-ci.org/ksss/rgot) -RGOT is a Ruby Golang like Testing package. +Ruby + Golang Testing = Rgot +Rgot is a testing package convert from golang testing. + ### usage test/sample.rb ```ruby class Sample @@ -50,5 +52,277 @@ === RUN test_pass --- PASS: test_pass (0.00003s) PASS ok 0.001s ``` + +# Feature + +## Testing + +I provide a very simple testing feature to you. + +**Rgot** testing is quite different from *RSpec* and *MiniTest* etc. + +Rgot carve out a new world of testing. + +So, You check only bad case in testing. + +## Benchmark + +You can write simple benchmark script with testing. + +This benchmark to adjust the time automatically. + +```ruby +module FooTest + def benchmark_something(b) + i = 0 + while i < b.n + something(1) + i += 1 + end + end +end +``` + +`b.n` is automatically adjusted. + +## Example + +Rgot's example feature is the best and if you want to write the sample code of your library. + +While presenting the sample code, it will be able to test whether the display results match at the same time. + +```ruby +module FooTest + class User + def initialize(name) + @name = name + end + + def hello + "Hello #{@name}" + end + end + + def example_something + user = User.new('ksss') + puts user.hello + # Output: + # Hello ksss + end + + def example_fail + user = User.new('ksss') + puts user.hello + # Output: + # Hi ksss + end +end +``` + +`example_fail` fail since output is different. + +So, you can notice that the sample code is wrong. + +# Naming convention + +## Filename + +Filename should be set '*_test.rb' + +## Module name + +Module name should be set 'XxxTest' + +'Xxx' can replace any string (in range of ruby module) + +Testing code file can split any number. + +But all file should be have one module (like golang package name). + +```ruby +module XxxTest +end +``` + +## Method name + +Method name should be set 'test_*' for testing. + +And benchmark method should be set 'benchmark_*'. + +```ruby +module XxxTest + def test_any_name(t) + end + + def benchmark_any_name(b) + end +end +``` + +# Command + +``` +$ rgot -h +Usage: rgot [options] + -v, --verbose log all tests + -b, --bench [regexp] benchmark + --benchtime [sec] benchmark running time + --timeout [sec] set timeout sec to testing +``` + +## Basic + +``` +$ rgot file_of_test.rb +PASS +ok 0.001s +``` + +Set filename to argument. + +Just only start testing file_of_test.rb. + +``` +$ rgot sample +PASS +ok 0.002s +``` + +And set dirname to argument, run all case of testing under this dir. + +## Verbose + +``` +$ rgot -v target_file_test.rb +=== RUN test_pass +--- PASS: test_pass (0.00005s) +PASS +ok 0.001s +``` + +Show all log and more detail infomation of testing. + +## Benchmark + +``` +$ rgot target_file_test.rb -b . +``` + +Run testing with benchmark. + +`.` means match all string for regexp. + +Set `someone` if you only run benchmark to match `someone` method.(e.g. benchmark_someone_1) + +## Timeout + +``` +$ rgot target_file_test.rb --timeout 3 +``` + +You can set timeout sec for testing (default 0). + +Fail testing and print raised exception message to STDERR if timeout. + +# Rgot::M (Main) + +Main method run first on testing. + +And this is default virtual main code. + +```ruby +module TestSomeCode + def test_main(m) + exit m.run + end +end +``` + +Main method should be set 'test_main' only. + +variable `m` is a instance of `Rgot::M` class means Main. + +`Rgot::M#run` start all testing methods. + +And return code of process end status. + +If you want to run before/after all testing method, You can write like this. + +```ruby +module TestSomeCode + def test_main(m) + the_before_running_some_code + code = m.run + the_after_running_some_code + exit code + end +end +``` + +# Rgot::Common + +`Rgot::Common` is inherited to `Rgot::T` and `Rgot::B` + +`Rgot::Common` have some logging method. + +## Rgot::Common#log + +```ruby +t.log("wooooo") +``` + +Write any log message. + +But this message to show need -v option. + +## Rgot::Common#error + +```ruby +t.error("expect #{a} got #{b}") +``` + +Test fail and show some error message. + +## Rgot::Common#skip + +```ruby +t.skip("this method was skipped") +``` + +Skip current testing method. + +And run to next testing method. + +# Rgot::T (Testing) + +Testing is a main usage of this package. + +```ruby +module TestSomeCode + def test_some_1(t) + end +end +``` + +The `t` variable is instance of `Rgot::T` class means Testing. + +# Rgot::B (Benchmark) + +For Benchmark class. + +Can use log methods same as `Rgot::T` class + +## Rgot::B#reset_timer + +Reset benchmark timer + +## Rgot::B#start_timer + +Start benchmark timer + +## Rgot::B#stop_timer + +Stop benchmark timer