Tôi không thể tin rằng không có ai nói về OSHT ! Nó tương thích với cả TAP và JUnit, nó là shell thuần túy (nghĩa là không có ngôn ngữ nào khác tham gia), nó cũng hoạt động độc lập, đơn giản và trực tiếp.
Thử nghiệm trông như thế này (các đoạn trích được lấy từ trang dự án):
#!/bin/bash
. osht.sh
# Optionally, indicate number of tests to safeguard against abnormal exits
PLAN 13
# Comparing stuff
IS $(whoami) != root
var="foobar"
IS "$var" =~ foo
ISNT "$var" == foo
# test(1)-based tests
OK -f /etc/passwd
NOK -w /etc/passwd
# Running stuff
# Check exit code
RUNS true
NRUNS false
# Check stdio/stdout/stderr
RUNS echo -e 'foo\nbar\nbaz'
GREP bar
OGREP bar
NEGREP . # verify empty
# diff output
DIFF <<EOF
foo
bar
baz
EOF
# TODO and SKIP
TODO RUNS false
SKIP test $(uname -s) == Darwin
Một bước chạy đơn giản:
$ bash test.sh
1..13
ok 1 - IS $(whoami) != root
ok 2 - IS "$var" =~ foo
ok 3 - ISNT "$var" == foo
ok 4 - OK -f /etc/passwd
ok 5 - NOK -w /etc/passwd
ok 6 - RUNS true
ok 7 - NRUNS false
ok 8 - RUNS echo -e 'foo\nbar\nbaz'
ok 9 - GREP bar
ok 10 - OGREP bar
ok 11 - NEGREP . # verify empty
ok 12 - DIFF <<EOF
not ok 13 - TODO RUNS false # TODO Test Know to fail
Kiểm tra cuối cùng cho thấy là "không ổn", nhưng mã thoát là 0 vì đó là a TODO
. Người ta cũng có thể thiết lập chi tiết:
$ OSHT_VERBOSE=1 bash test.sh # Or -v
1..13
# dcsobral \!= root
ok 1 - IS $(whoami) != root
# foobar =\~ foo
ok 2 - IS "$var" =~ foo
# \! foobar == foo
ok 3 - ISNT "$var" == foo
# test -f /etc/passwd
ok 4 - OK -f /etc/passwd
# test \! -w /etc/passwd
ok 5 - NOK -w /etc/passwd
# RUNNING: true
# STATUS: 0
# STDIO <<EOM
# EOM
ok 6 - RUNS true
# RUNNING: false
# STATUS: 1
# STDIO <<EOM
# EOM
ok 7 - NRUNS false
# RUNNING: echo -e foo\\nbar\\nbaz
# STATUS: 0
# STDIO <<EOM
# foo
# bar
# baz
# EOM
ok 8 - RUNS echo -e 'foo\nbar\nbaz'
# grep -q bar
ok 9 - GREP bar
# grep -q bar
ok 10 - OGREP bar
# \! grep -q .
ok 11 - NEGREP . # verify empty
ok 12 - DIFF <<EOF
# RUNNING: false
# STATUS: 1
# STDIO <<EOM
# EOM
not ok 13 - TODO RUNS false # TODO Test Know to fail
Đổi tên nó để sử dụng một .t
tiện ích mở rộng và đặt nó vào một t
thư mục con và bạn có thể sử dụng prove(1)
(một phần của Perl) để chạy nó:
$ prove
t/test.t .. ok
All tests successful.
Files=1, Tests=13, 0 wallclock secs ( 0.03 usr 0.01 sys + 0.11 cusr 0.16 csys = 0.31 CPU)
Result: PASS
Đặt OSHT_JUNIT
hoặc chuyển -j
để tạo ra đầu ra JUnit. JUnit cũng có thể được kết hợp với prove(1)
.
Tôi đã sử dụng thư viện này cả hai chức năng kiểm tra bằng cách tìm nguồn cung cấp các tệp của chúng và sau đó chạy các xác nhận với IS
/ OK
và các phủ định của chúng và các tập lệnh bằng cách sử dụng RUN
/ NRUN
. Đối với tôi, khung công tác này mang lại nhiều lợi ích nhất với chi phí ít nhất.