SlideShare a Scribd company logo
1 of 92
Download to read offline
@markbates
Tuesday, September 10, 13
A
Tuesday, September 10, 13
BIGTuesday, September 10, 13
look at
Tuesday, September 10, 13
MiniTest
Tuesday, September 10, 13
Tuesday, September 10, 13
Tuesday, September 10, 13
#	
  Running	
  tests:
	
  
...........................................
	
  
Finished	
  tests	
  in	
  1.851323s,	
  1.6014	
  tests/s,	
  6.7781	
  assertions/s.
	
  
43	
  tests,	
  182	
  assertions,	
  0	
  failures,	
  0	
  errors,	
  0	
  skips
Tuesday, September 10, 13
Step 1:
Setup Testing Framework
Tuesday, September 10, 13
Tuesday, September 10, 13
Tuesday, September 10, 13
Tuesday, September 10, 13
Tuesday, September 10, 13
• RSpec
• MiniTest
• test-unit
• Bacon
• Riot
• Wrong
• Shindo
• testrocket
• rubydoctest
• Testy
• Micronaut
• Kintama
• dtf
• assert
• test_inline
• Lemon
• Detest
Tuesday, September 10, 13
MiniTest
Tuesday, September 10, 13
Good Things Come in Small Packages
Tuesday, September 10, 13
Tuesday, September 10, 13
Tuesday, September 10, 13
Tuesday, September 10, 13
Tuesday, September 10, 13
require	
  'minitest/autorun'
	
  
class	
  Foo
	
  	
  def	
  add(x,	
  y)
	
  	
  	
  	
  x	
  +	
  y
	
  	
  end
end
	
  
describe	
  Foo	
  do
	
  	
  describe	
  '#add'	
  do
	
  	
  	
  	
  it	
  'adds	
  two	
  numbers'	
  do
	
  	
  	
  	
  	
  	
  Foo.new.add(4,	
  2).must_equal	
  6
	
  	
  	
  	
  end
	
  	
  end
end
Tuesday, September 10, 13
require	
  'minitest/autorun'
	
  
class	
  Foo
	
  	
  def	
  add(x,	
  y)
	
  	
  	
  	
  x	
  +	
  y
	
  	
  end
end
	
  
class	
  TestFoo	
  <	
  MiniTest::Unit::TestCase
	
  	
  def	
  test_add
	
  	
  	
  	
  assert_equal	
  6,	
  Foo.new.add(4,	
  2)
	
  	
  end
end
Tuesday, September 10, 13
Tuesday, September 10, 13
IT SHIPS WITH
RUBY!!!
Tuesday, September 10, 13
>= 1.9
Tuesday, September 10, 13
also available as a gem
Tuesday, September 10, 13
Familiar Syntax to RSpec or Test::Unit
Tuesday, September 10, 13
MiniTest replaced Test::Unit in 1.9
Tuesday, September 10, 13
The Basics
Tuesday, September 10, 13
MiniTest::Spec
Tuesday, September 10, 13
describe	
  Something	
  do
	
  
	
  	
  it	
  "does	
  something"	
  do	
  
	
  	
  	
  	
  #	
  tests	
  go	
  here
	
  	
  end
	
  
end
Tuesday, September 10, 13
describe	
  Something	
  do
	
  
	
  	
  before	
  do	
  
	
  	
  	
  	
  #	
  setup	
  code	
  goes	
  here
	
  	
  end
	
  
	
  	
  after	
  do	
  
	
  	
  	
  	
  #	
  tear	
  down	
  code	
  goes	
  here
	
  	
  end
	
  
	
  	
  it	
  "does	
  something"	
  do	
  
	
  	
  	
  	
  #	
  tests	
  go	
  here
	
  	
  end
	
  
end
Tuesday, September 10, 13
describe	
  Something	
  do
	
  
	
  	
  describe	
  'something	
  else'	
  do
	
  
	
  	
  	
  	
  it	
  "does	
  something"	
  do	
  
	
  	
  	
  	
  	
  	
  #	
  tests	
  go	
  here
	
  	
  	
  	
  end
	
  
	
  	
  end
	
  
end
Tuesday, September 10, 13
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  Something.new(name:	
  'Widget')	
  }
	
  
	
  	
  describe	
  'something	
  else'	
  do
	
  
	
  	
  	
  	
  it	
  "does	
  something"	
  do
	
  	
  	
  	
  	
  	
  something.name.must_equal	
  'Widget'
	
  	
  	
  	
  end
	
  
	
  	
  end
	
  
end
Tuesday, September 10, 13
describe	
  Something	
  do
	
  
	
  	
  subject	
  {	
  Something.new(name:	
  'Widget')	
  }
	
  
	
  	
  describe	
  'something	
  else'	
  do
	
  
	
  	
  	
  	
  it	
  "does	
  something"	
  do
	
  	
  	
  	
  	
  	
  subject.name.must_equal	
  'Widget'
	
  	
  	
  	
  end
	
  
	
  	
  end
	
  
end
Tuesday, September 10, 13
describe	
  Something	
  do
	
  
	
  	
  subject	
  {	
  Something.new(name:	
  'Widget')	
  }
	
  
	
  	
  context	
  'something	
  else'	
  do
	
  
	
  	
  	
  	
  it	
  "does	
  something"	
  do
	
  	
  	
  	
  	
  	
  subject.name.must_equal	
  'Widget'
	
  	
  	
  	
  end
	
  
	
  	
  end
	
  
end
Tuesday, September 10, 13
scrap.rb:19:in	
  `block	
  in	
  <main>':	
  undefined	
  method	
  `context'	
  for	
  #<Class:
0x007fce92074b40>	
  (NoMethodError)
	
  	
  	
  	
  	
  	
  	
  	
  from	
  /Users/markbates/.../lib/minitest/spec.rb:71:in	
  `class_eval'
	
  	
  	
  	
  	
  	
  	
  	
  from	
  /Users/markbates/.../lib/minitest/spec.rb:71:in	
  `describe'
	
  	
  	
  	
  	
  	
  	
  	
  from	
  scrap.rb:15:in	
  `<main>'
Tuesday, September 10, 13
class	
  MiniTest::Spec
	
  
	
  	
  class	
  <<	
  self
	
  	
  	
  	
  alias	
  :context	
  :describe
	
  	
  end
	
  
end
Tuesday, September 10, 13
Pending
Tuesday, September 10, 13
describe	
  Something	
  do
	
  
	
  	
  it	
  'does	
  something'
	
  
	
  	
  it	
  'does	
  something	
  else'	
  do
	
  	
  	
  	
  skip
	
  	
  end
	
  
	
  	
  it	
  'does	
  another	
  thing'	
  do
	
  	
  	
  	
  skip	
  "here's	
  some	
  reason	
  why"
	
  	
  end
	
  
end
Tuesday, September 10, 13
#	
  Running	
  tests:
	
  
SSS
	
  
Finished	
  tests	
  in	
  0.000912s,	
  3289.4737	
  tests/s,	
  
0.0000	
  assertions/s.
	
  
3	
  tests,	
  0	
  assertions,	
  0	
  failures,	
  0	
  errors,	
  3	
  skips	
  
Tuesday, September 10, 13
Expectations
Tuesday, September 10, 13
• must_be
• must_be_close_to
• must_be_empty
• must_be_instance_of
• must_be_kind_of
• must_be_nil
• must_be_same_as
• must_be_silent
• must_be_within_epsilon
• must_equal
• must_include
• must_match
• must_output
• must_respond_to
• must_raise
• must_send
• must_throw
Tuesday, September 10, 13
• wont_be
• wont_be_close_to
• wont_be_empty
• wont_be_instance_of
• wont_be_kind_of
• wont_be_nil
• wont_be_same_as
• wont_be_silent
• wont_be_within_epsilon
• wont_equal
• wont_include
• wont_match
• wont_output
• wont_respond_to
• wont_raise
• wont_send
• wont_throw
Tuesday, September 10, 13
describe	
  Something	
  do
	
  
	
  	
  it	
  "does	
  something"	
  do
	
  	
  	
  	
  lambda	
  {nil	
  /	
  2}.must_raise	
  NoMethodError
	
  	
  	
  	
  ["one",	
  "two"].must_include	
  "one"
	
  	
  	
  	
  ["one",	
  "two"].wont_include	
  "three"
	
  	
  	
  	
  nil.must_be_nil
	
  	
  	
  	
  [].must_be	
  :empty?
	
  	
  end
	
  
end
Tuesday, September 10, 13
MiniTest::Unit
Tuesday, September 10, 13
class	
  TestSomething	
  <	
  MiniTest::Unit::TestCase
	
  
	
  	
  def	
  test_something
	
  	
  	
  	
  #tests	
  go	
  here
	
  	
  end
	
  
end
Tuesday, September 10, 13
class	
  TestSomething	
  <	
  MiniTest::Unit::TestCase
	
  
	
  	
  def	
  setup
	
  	
  	
  	
  #	
  setup	
  code	
  goes	
  here
	
  	
  end
	
  
	
  	
  def	
  teardown
	
  	
  	
  	
  #	
  tear	
  down	
  code	
  goes	
  here
	
  	
  end
	
  
	
  	
  def	
  test_something
	
  	
  	
  	
  #	
  tests	
  go	
  here
	
  	
  end
	
  
end
Tuesday, September 10, 13
class	
  TestSomething	
  <	
  MiniTest::Unit::TestCase
	
  
	
  	
  def	
  test_something
	
  	
  	
  	
  assert	
  true
	
  	
  end
	
  
	
  	
  class	
  TestSomethingElse	
  <	
  MiniTest::Unit::TestCase
	
  	
  
	
  	
  	
  	
  def	
  test_something_else
	
  	
  	
  	
  	
  	
  assert	
  true
	
  	
  	
  	
  end
	
  	
  	
  	
  
	
  	
  end
	
  
end
Tuesday, September 10, 13
No let
Tuesday, September 10, 13
No subject
Tuesday, September 10, 13
Pending
Tuesday, September 10, 13
class	
  SomethingTest	
  <	
  MiniTest::Unit::TestCase
	
  
	
  	
  def	
  test_something
	
  	
  	
  	
  skip
	
  	
  end
	
  
	
  	
  def	
  test_something_else
	
  	
  	
  	
  skip	
  "here's	
  some	
  reason	
  why"
	
  	
  end
	
  
end
Tuesday, September 10, 13
#	
  Running	
  tests:
	
  
SS
	
  
Finished	
  tests	
  in	
  0.000663s,	
  3016.5913	
  tests/s,	
  
0.0000	
  assertions/s.
	
  
2	
  tests,	
  0	
  assertions,	
  0	
  failures,	
  0	
  errors,	
  2	
  skips
Tuesday, September 10, 13
Assertions
Tuesday, September 10, 13
• assert
• assert_block
• assert_empty
• assert_equal
• assert_in_delta
• assert_in_epsilon
• assert_includes
• assert_instance_of
• assert_kind_of
• assert_match
• assert_nil
• assert_operator
• assert_output
• assert_raises
• assert_respond_to
• assert_same
• assert_send
• assert_silent
Tuesday, September 10, 13
• refute
• refute_block
• refute_empty
• refute_equal
• refute_in_delta
• refute_in_epsilon
• refute_includes
• refute_instance_of
• refute_kind_of
• refute_match
• refute_nil
• refute_operator
• refute_output
• refute_raises
• refute_respond_to
• refute_same
• refute_send
• refute_silent
Tuesday, September 10, 13
Mocking/Stubbing
Tuesday, September 10, 13
Very Basic
Tuesday, September 10, 13
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  MiniTest::Mock.new	
  }
	
  
	
  	
  it	
  "does	
  something"	
  do
	
  	
  	
  	
  something.expect(:name,	
  'Widget')
	
  	
  	
  	
  something.name.must_equal	
  'Widget'
	
  	
  	
  	
  something.verify
	
  	
  end
	
  
end
Tuesday, September 10, 13
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  MiniTest::Mock.new	
  }
	
  
	
  	
  it	
  "does	
  something"	
  do
	
  	
  	
  	
  something.expect(:name,	
  'Widget')
	
  	
  	
  	
  something.verify
	
  	
  end
	
  
end
Tuesday, September 10, 13
#	
  Running	
  tests:
	
  
E
	
  
Finished	
  tests	
  in	
  0.000858s,	
  1165.5012	
  tests/s,	
  0.0000	
  
assertions/s.
	
  
	
  	
  1)	
  Error:
OpenStruct#test_0001_does	
  something:
MockExpectationError:	
  expected	
  name()	
  =>	
  "Widget",	
  got	
  []
	
  	
  	
  	
  scrap.rb:22:in	
  `block	
  (2	
  levels)	
  in	
  <main>'
	
  
1	
  tests,	
  0	
  assertions,	
  0	
  failures,	
  1	
  errors,	
  0	
  skips	
  
Tuesday, September 10, 13
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  Something.new(name:	
  'Widget')	
  }
	
  
	
  	
  it	
  "does	
  something"	
  do
	
  	
  	
  	
  something.stub(:name,	
  'Thingy')	
  do
	
  	
  	
  	
  	
  	
  something.name.must_equal	
  'Thingy'
	
  	
  	
  	
  end
	
  	
  end
	
  
end
Tuesday, September 10, 13
Struct, OpenStruct
Tuesday, September 10, 13
describe	
  "Something"	
  do
	
  
	
  	
  let(:something)	
  {	
  OpenStruct.new(name:	
  'Widget')	
  }
	
  
	
  	
  it	
  "does	
  something"	
  do
	
  	
  	
  	
  something.name.must_equal	
  'Widget'
	
  	
  end
	
  
end
Tuesday, September 10, 13
describe	
  Something	
  do
	
  
	
  	
  let(:something)	
  {	
  Something.new(name:	
  'Widget')	
  }
	
  
	
  	
  it	
  "does	
  something"	
  do
	
  	
  	
  	
  def	
  something.name
	
  	
  	
  	
  	
  	
  "Thingy"
	
  	
  	
  	
  end
	
  	
  	
  	
  something.name.must_equal	
  'Thingy'
	
  	
  end
	
  
end
Tuesday, September 10, 13
Mocha, RR, FlexMock
Tuesday, September 10, 13
Custom
Assertions
Tuesday, September 10, 13
describe	
  Something	
  do
	
  
	
  	
  it	
  "does	
  something"	
  do
	
  	
  	
  	
  1.2.must_round_to	
  1
	
  	
  	
  	
  1.7.wont_round_to	
  1
	
  	
  end
	
  
end
Tuesday, September 10, 13
module	
  MiniTest::Assertions
	
  
	
  	
  def	
  assert_equals_rounded(rounded,	
  decimal)
	
  	
  	
  	
  assert	
  rounded	
  ==	
  decimal.round,	
  "Expected	
  #{decimal}	
  to	
  round	
  to	
  #{rounded}"
	
  	
  end
	
  
	
  	
  def	
  refute_equals_rounded(rounded,	
  decimal)
	
  	
  	
  	
  assert	
  rounded	
  !=	
  decimal.round,	
  "Expected	
  #{decimal}	
  to	
  not	
  round	
  to	
  #{rounded}"
	
  	
  end
	
  
end
	
  
Numeric.infect_an_assertion	
  :assert_equals_rounded,	
  :must_round_to
Numeric.infect_an_assertion	
  :refute_equals_rounded,	
  :wont_round_to
Tuesday, September 10, 13
describe	
  Something	
  do
	
  
	
  	
  it	
  "does	
  something"	
  do
	
  	
  	
  	
  1.2.must_round_to	
  1
	
  	
  	
  	
  1.7.wont_round_to	
  1
	
  	
  end
	
  
end
Tuesday, September 10, 13
Rails
Tuesday, September 10, 13
gem “minitest-rails”
Tuesday, September 10, 13
ENV["RAILS_ENV"]	
  =	
  "test"
require	
  File.expand_path("../../config/environment",	
  __FILE__)
require	
  "rails/test_help"
require	
  "minitest/rails"
	
  
#	
  Add	
  `gem	
  "minitest-­‐rails-­‐capybara"`	
  to	
  the	
  test	
  group	
  of	
  your	
  Gemfile
#	
  and	
  uncomment	
  the	
  following	
  if	
  you	
  want	
  Capybara	
  feature	
  tests
#	
  require	
  "minitest/rails/capybara"
	
  
module	
  MiniTest::Expectations
	
  	
  infect_an_assertion	
  :assert_redirected_to,	
  :must_redirect_to
	
  	
  infect_an_assertion	
  :assert_template,	
  :must_render_template
	
  	
  infect_an_assertion	
  :assert_response,	
  :must_respond_with
end
	
  
class	
  ActiveSupport::TestCase
	
  
	
  	
  #	
  Add	
  more	
  helper	
  methods	
  to	
  be	
  used	
  by	
  all	
  tests	
  here...
	
  	
  before	
  do
	
  	
  end
	
  
	
  	
  after	
  do
	
  	
  end
	
  
end
Tuesday, September 10, 13
rake	
  minitest	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  #	
  Run	
  default	
  tests
rake	
  minitest:all	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  #	
  Run	
  all	
  tests
rake	
  minitest:all:quick	
  	
  	
  	
  	
  #	
  Run	
  all	
  tests,	
  ungrouped	
  for	
  quicker	
  execution
rake	
  minitest:controllers	
  	
  	
  #	
  Runs	
  tests	
  under	
  test/controllers
rake	
  minitest:lib	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  #	
  Runs	
  tests	
  under	
  test/lib
rake	
  minitest:models	
  	
  	
  	
  	
  	
  	
  	
  #	
  Runs	
  tests	
  under	
  test/models
Tuesday, September 10, 13
task	
  :mt	
  =>	
  'minitest:all:quick'
Rake::Task["default"].clear
task	
  :default	
  =>	
  :mt
Tuesday, September 10, 13
ruby	
  -­‐I	
  test	
  test/models/user_test.rb
Tuesday, September 10, 13
describe	
  FeedController	
  do
	
  
	
  	
  describe	
  '#index'	
  do
	
  
	
  	
  	
  	
  it	
  'renders	
  an	
  atom	
  feed'	
  do
	
  	
  	
  	
  	
  	
  get	
  :index
	
  
	
  	
  	
  	
  	
  	
  must_render_template	
  :index
	
  	
  	
  	
  end
	
  
	
  	
  	
  	
  it	
  'redirects	
  from	
  an	
  RSS	
  feed'	
  do
	
  	
  	
  	
  	
  	
  get	
  :index,	
  format:	
  'rss'
	
  
	
  	
  	
  	
  	
  	
  must_redirect_to	
  feed_path(format:	
  :atom)
	
  	
  	
  	
  end
	
  
	
  	
  end
	
  
end
Tuesday, September 10, 13
gem “guard-minitest”
Tuesday, September 10, 13
guard	
  :minitest	
  do
	
  	
  watch(%r|^app/controllers/(.*).rb|)	
  {	
  |m|	
  "test/controllers/#{m[1]}_test.rb"	
  }
	
  	
  watch(%r|^app/helpers/(.*).rb|)	
  	
  	
  	
  	
  {	
  |m|	
  "test/helpers/#{m[1]}_test.rb"	
  }
	
  	
  watch(%r|^app/models/(.*).rb|)	
  	
  	
  	
  	
  	
  {	
  |m|	
  "test/models/#{m[1]}_test.rb"	
  }
	
  	
  watch(%r{^test/test_helper.rb})	
  	
  	
  	
  	
  {	
  'test'	
  }
	
  	
  watch(%r{^test/.+_test.rb})
	
  	
  watch(%r{^app/(.+).rb})	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {	
  |m|	
  "test/#{m[1]}_test.rb"	
  }
	
  	
  watch(%r{^app/controllers/application_controller.rb})	
  {	
  'test/controllers'	
  }
	
  	
  watch(%r{^lib/(.+).rb})	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {	
  |m|	
  "test/lib/#{m[1]}_test.rb"	
  }
end
Tuesday, September 10, 13
gem “m”
Tuesday, September 10, 13
m	
  test/models/user_test.rb:37
Tuesday, September 10, 13
gem “minitest-rails-capybara”
Tuesday, September 10, 13
feature	
  "Can	
  Access	
  Home"	
  do
	
  
	
  	
  scenario	
  "has	
  content"	
  do
	
  	
  	
  	
  visit	
  root_path
	
  	
  	
  	
  assert	
  page.has_content?("Home#index")
	
  	
  end
	
  	
  
end
Tuesday, September 10, 13
Wrapping Up
Tuesday, September 10, 13
familiar syntax
Tuesday, September 10, 13
95% of RSpec
Tuesday, September 10, 13
lightweight
Tuesday, September 10, 13
rspec	
  (2.14.1)
	
  	
  rspec-­‐core	
  (~>	
  2.14.0)
	
  	
  rspec-­‐expectations	
  (~>	
  2.14.0)
	
  	
  rspec-­‐mocks	
  (~>	
  2.14.0)
rspec-­‐core	
  (2.14.5)
rspec-­‐expectations	
  (2.14.2)
	
  	
  diff-­‐lcs	
  (>=	
  1.1.3,	
  <	
  2.0)
Tuesday, September 10, 13
Ships with Ruby!
Tuesday, September 10, 13
• https://github.com/seattlerb/minitest
• http://www.mattsears.com/articles/2011/12/10/minitest-quick-reference
• http://blog.arvidandersson.se/2012/03/28/minimalicous-testing-in-ruby-1-9
• https://github.com/blowmage/minitest-rails-capybara
• https://github.com/guard/guard-minitest
• https://github.com/qrush/m
• http://www.metacasts.tv/casts/minitest-spec
• http://www.metacasts.tv/casts/minitest-rails
• http://www.metacasts.tv/casts/testing-sinatra
Tuesday, September 10, 13
Thanks!
@markbates
www.metacasts.tv
Tuesday, September 10, 13

More Related Content

Viewers also liked

wwf_2010_Certification & Roundtables
wwf_2010_Certification & Roundtables wwf_2010_Certification & Roundtables
wwf_2010_Certification & Roundtables Christine L. Carey
 
Public Telecare Service of the Basque Government: a integrated health and soc...
Public Telecare Service of the Basque Government: a integrated health and soc...Public Telecare Service of the Basque Government: a integrated health and soc...
Public Telecare Service of the Basque Government: a integrated health and soc...Alfredo Alday
 
Petisco.como_Protocolo Sinapsa
Petisco.como_Protocolo SinapsaPetisco.como_Protocolo Sinapsa
Petisco.como_Protocolo SinapsaSinapsa
 
Formación curricular en diseño para todos.
Formación curricular en diseño para todos.Formación curricular en diseño para todos.
Formación curricular en diseño para todos.José María
 
Reglamento Aula Movil
Reglamento Aula MovilReglamento Aula Movil
Reglamento Aula MovilTicens
 
Presentación FGXpress Español (Andrew Arrambide 2015)
Presentación FGXpress Español (Andrew Arrambide 2015)Presentación FGXpress Español (Andrew Arrambide 2015)
Presentación FGXpress Español (Andrew Arrambide 2015)FGX PresSpain
 
9742647 profesiones
9742647 profesiones9742647 profesiones
9742647 profesionesocg50
 
Interview franck - Chauffeur Poids Lourd chez Transvoirie
Interview franck - Chauffeur Poids Lourd chez TransvoirieInterview franck - Chauffeur Poids Lourd chez Transvoirie
Interview franck - Chauffeur Poids Lourd chez TransvoirieMike Sebaut
 
EDUCACIÓN VIRTUAL VS EDUCACIÓN PRESENCIAL
EDUCACIÓN VIRTUAL VS EDUCACIÓN PRESENCIALEDUCACIÓN VIRTUAL VS EDUCACIÓN PRESENCIAL
EDUCACIÓN VIRTUAL VS EDUCACIÓN PRESENCIALEstefaniapg456
 
Complejidad Ambiental
Complejidad AmbientalComplejidad Ambiental
Complejidad AmbientalEn casa
 
URETEK Nederland BV - bedrijfsbrochure
URETEK Nederland BV - bedrijfsbrochureURETEK Nederland BV - bedrijfsbrochure
URETEK Nederland BV - bedrijfsbrochurepwestland
 
Communication Privacy Management Theory
Communication Privacy Management TheoryCommunication Privacy Management Theory
Communication Privacy Management Theorymlodom
 

Viewers also liked (20)

PG&E Electric NOI
PG&E Electric NOIPG&E Electric NOI
PG&E Electric NOI
 
wwf_2010_Certification & Roundtables
wwf_2010_Certification & Roundtables wwf_2010_Certification & Roundtables
wwf_2010_Certification & Roundtables
 
Wethebiocloud.programa.2013
Wethebiocloud.programa.2013Wethebiocloud.programa.2013
Wethebiocloud.programa.2013
 
Public Telecare Service of the Basque Government: a integrated health and soc...
Public Telecare Service of the Basque Government: a integrated health and soc...Public Telecare Service of the Basque Government: a integrated health and soc...
Public Telecare Service of the Basque Government: a integrated health and soc...
 
Sinver aguilo utesa 1 15-5742
Sinver aguilo utesa 1 15-5742Sinver aguilo utesa 1 15-5742
Sinver aguilo utesa 1 15-5742
 
Petisco.como_Protocolo Sinapsa
Petisco.como_Protocolo SinapsaPetisco.como_Protocolo Sinapsa
Petisco.como_Protocolo Sinapsa
 
Formación curricular en diseño para todos.
Formación curricular en diseño para todos.Formación curricular en diseño para todos.
Formación curricular en diseño para todos.
 
Reglamento Aula Movil
Reglamento Aula MovilReglamento Aula Movil
Reglamento Aula Movil
 
Presentación FGXpress Español (Andrew Arrambide 2015)
Presentación FGXpress Español (Andrew Arrambide 2015)Presentación FGXpress Español (Andrew Arrambide 2015)
Presentación FGXpress Español (Andrew Arrambide 2015)
 
9742647 profesiones
9742647 profesiones9742647 profesiones
9742647 profesiones
 
Interview franck - Chauffeur Poids Lourd chez Transvoirie
Interview franck - Chauffeur Poids Lourd chez TransvoirieInterview franck - Chauffeur Poids Lourd chez Transvoirie
Interview franck - Chauffeur Poids Lourd chez Transvoirie
 
EDUCACIÓN VIRTUAL VS EDUCACIÓN PRESENCIAL
EDUCACIÓN VIRTUAL VS EDUCACIÓN PRESENCIALEDUCACIÓN VIRTUAL VS EDUCACIÓN PRESENCIAL
EDUCACIÓN VIRTUAL VS EDUCACIÓN PRESENCIAL
 
PEI
PEIPEI
PEI
 
Complejidad Ambiental
Complejidad AmbientalComplejidad Ambiental
Complejidad Ambiental
 
URETEK Nederland BV - bedrijfsbrochure
URETEK Nederland BV - bedrijfsbrochureURETEK Nederland BV - bedrijfsbrochure
URETEK Nederland BV - bedrijfsbrochure
 
Me sistema financiero
Me sistema financieroMe sistema financiero
Me sistema financiero
 
Kermesse 09 10
Kermesse 09 10Kermesse 09 10
Kermesse 09 10
 
Productos BRUMOL
Productos BRUMOLProductos BRUMOL
Productos BRUMOL
 
iPlanet presentation
iPlanet presentationiPlanet presentation
iPlanet presentation
 
Communication Privacy Management Theory
Communication Privacy Management TheoryCommunication Privacy Management Theory
Communication Privacy Management Theory
 

Similar to A Big Look at MiniTest

Unit and functional testing with Siesta
Unit and functional testing with SiestaUnit and functional testing with Siesta
Unit and functional testing with SiestaGrgur Grisogono
 
How To Test Everything
How To Test EverythingHow To Test Everything
How To Test Everythingnoelrap
 
Feature Flagging your Infrastructure for Fun and Profit
Feature Flagging your Infrastructure for Fun and ProfitFeature Flagging your Infrastructure for Fun and Profit
Feature Flagging your Infrastructure for Fun and ProfitDaniel Schauenberg
 
RSpec best practice - avoid using before and let
RSpec best practice - avoid using before and letRSpec best practice - avoid using before and let
RSpec best practice - avoid using before and letBruce Li
 
When Tdd Goes Awry (IAD 2013)
When Tdd Goes Awry (IAD 2013)When Tdd Goes Awry (IAD 2013)
When Tdd Goes Awry (IAD 2013)Uberto Barbini
 
Ruby meetup 7_years_in_testing
Ruby meetup 7_years_in_testingRuby meetup 7_years_in_testing
Ruby meetup 7_years_in_testingDigital Natives
 
Django’s nasal passage
Django’s nasal passageDjango’s nasal passage
Django’s nasal passageErik Rose
 
Object-Oriented BDD w/ Cucumber by Matt van Horn
Object-Oriented BDD w/ Cucumber by Matt van HornObject-Oriented BDD w/ Cucumber by Matt van Horn
Object-Oriented BDD w/ Cucumber by Matt van HornSolano Labs
 
Slides changes symfony23
Slides changes symfony23Slides changes symfony23
Slides changes symfony23Javier López
 
Ten Groovy Little JavaScript Tips
Ten Groovy Little JavaScript TipsTen Groovy Little JavaScript Tips
Ten Groovy Little JavaScript TipsTroy Miles
 
Cooking an Omelette with Chef
Cooking an Omelette with ChefCooking an Omelette with Chef
Cooking an Omelette with Chefctaintor
 
Integration Testing With Cucumber How To Test Anything J A O O 2009
Integration Testing With  Cucumber    How To Test Anything    J A O O 2009Integration Testing With  Cucumber    How To Test Anything    J A O O 2009
Integration Testing With Cucumber How To Test Anything J A O O 2009Dr Nic Williams
 
Agileee 2013: Andrii Dzynia "How To Manage Testing in Agile World"
Agileee 2013: Andrii Dzynia "How To Manage Testing in Agile World"Agileee 2013: Andrii Dzynia "How To Manage Testing in Agile World"
Agileee 2013: Andrii Dzynia "How To Manage Testing in Agile World"SCRUMguides
 
And the Greatest of These Is ... Space
And the Greatest of These Is ... SpaceAnd the Greatest of These Is ... Space
And the Greatest of These Is ... SpaceBen Scofield
 
Reasons To Love Ruby
Reasons To Love RubyReasons To Love Ruby
Reasons To Love RubyBen Scheirman
 
Dependency Injection @ AngularJS
Dependency Injection @ AngularJSDependency Injection @ AngularJS
Dependency Injection @ AngularJSRan Mizrahi
 

Similar to A Big Look at MiniTest (20)

Unit and functional testing with Siesta
Unit and functional testing with SiestaUnit and functional testing with Siesta
Unit and functional testing with Siesta
 
How To Test Everything
How To Test EverythingHow To Test Everything
How To Test Everything
 
Unit Testing Lots of Perl
Unit Testing Lots of PerlUnit Testing Lots of Perl
Unit Testing Lots of Perl
 
Feature Flagging your Infrastructure for Fun and Profit
Feature Flagging your Infrastructure for Fun and ProfitFeature Flagging your Infrastructure for Fun and Profit
Feature Flagging your Infrastructure for Fun and Profit
 
Ruby Blocks
Ruby BlocksRuby Blocks
Ruby Blocks
 
RSpec best practice - avoid using before and let
RSpec best practice - avoid using before and letRSpec best practice - avoid using before and let
RSpec best practice - avoid using before and let
 
When Tdd Goes Awry (IAD 2013)
When Tdd Goes Awry (IAD 2013)When Tdd Goes Awry (IAD 2013)
When Tdd Goes Awry (IAD 2013)
 
Ruby meetup 7_years_in_testing
Ruby meetup 7_years_in_testingRuby meetup 7_years_in_testing
Ruby meetup 7_years_in_testing
 
Backbone
BackboneBackbone
Backbone
 
Django’s nasal passage
Django’s nasal passageDjango’s nasal passage
Django’s nasal passage
 
Object-Oriented BDD w/ Cucumber by Matt van Horn
Object-Oriented BDD w/ Cucumber by Matt van HornObject-Oriented BDD w/ Cucumber by Matt van Horn
Object-Oriented BDD w/ Cucumber by Matt van Horn
 
Hidden Gems of Ruby 1.9
Hidden Gems of Ruby 1.9Hidden Gems of Ruby 1.9
Hidden Gems of Ruby 1.9
 
Slides changes symfony23
Slides changes symfony23Slides changes symfony23
Slides changes symfony23
 
Ten Groovy Little JavaScript Tips
Ten Groovy Little JavaScript TipsTen Groovy Little JavaScript Tips
Ten Groovy Little JavaScript Tips
 
Cooking an Omelette with Chef
Cooking an Omelette with ChefCooking an Omelette with Chef
Cooking an Omelette with Chef
 
Integration Testing With Cucumber How To Test Anything J A O O 2009
Integration Testing With  Cucumber    How To Test Anything    J A O O 2009Integration Testing With  Cucumber    How To Test Anything    J A O O 2009
Integration Testing With Cucumber How To Test Anything J A O O 2009
 
Agileee 2013: Andrii Dzynia "How To Manage Testing in Agile World"
Agileee 2013: Andrii Dzynia "How To Manage Testing in Agile World"Agileee 2013: Andrii Dzynia "How To Manage Testing in Agile World"
Agileee 2013: Andrii Dzynia "How To Manage Testing in Agile World"
 
And the Greatest of These Is ... Space
And the Greatest of These Is ... SpaceAnd the Greatest of These Is ... Space
And the Greatest of These Is ... Space
 
Reasons To Love Ruby
Reasons To Love RubyReasons To Love Ruby
Reasons To Love Ruby
 
Dependency Injection @ AngularJS
Dependency Injection @ AngularJSDependency Injection @ AngularJS
Dependency Injection @ AngularJS
 

More from Mark

Building Go Web Apps
Building Go Web AppsBuilding Go Web Apps
Building Go Web AppsMark
 
Angular.js Fundamentals
Angular.js FundamentalsAngular.js Fundamentals
Angular.js FundamentalsMark
 
Go(lang) for the Rubyist
Go(lang) for the RubyistGo(lang) for the Rubyist
Go(lang) for the RubyistMark
 
Mangling Ruby with TracePoint
Mangling Ruby with TracePointMangling Ruby with TracePoint
Mangling Ruby with TracePointMark
 
AngularJS vs. Ember.js vs. Backbone.js
AngularJS vs. Ember.js vs. Backbone.jsAngularJS vs. Ember.js vs. Backbone.js
AngularJS vs. Ember.js vs. Backbone.jsMark
 
GET /better
GET /betterGET /better
GET /betterMark
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScriptMark
 
Testing Your JavaScript & CoffeeScript
Testing Your JavaScript & CoffeeScriptTesting Your JavaScript & CoffeeScript
Testing Your JavaScript & CoffeeScriptMark
 
Building an API in Rails without Realizing It
Building an API in Rails without Realizing ItBuilding an API in Rails without Realizing It
Building an API in Rails without Realizing ItMark
 
5 Favorite Gems (Lightning Talk(
5 Favorite Gems (Lightning Talk(5 Favorite Gems (Lightning Talk(
5 Favorite Gems (Lightning Talk(Mark
 
CoffeeScript for the Rubyist
CoffeeScript for the RubyistCoffeeScript for the Rubyist
CoffeeScript for the RubyistMark
 
RubyMotion
RubyMotionRubyMotion
RubyMotionMark
 
Testing JavaScript/CoffeeScript with Mocha and Chai
Testing JavaScript/CoffeeScript with Mocha and ChaiTesting JavaScript/CoffeeScript with Mocha and Chai
Testing JavaScript/CoffeeScript with Mocha and ChaiMark
 
CoffeeScript for the Rubyist
CoffeeScript for the RubyistCoffeeScript for the Rubyist
CoffeeScript for the RubyistMark
 
Testing Rich Client Side Apps with Jasmine
Testing Rich Client Side Apps with JasmineTesting Rich Client Side Apps with Jasmine
Testing Rich Client Side Apps with JasmineMark
 
DRb and Rinda
DRb and RindaDRb and Rinda
DRb and RindaMark
 
CoffeeScript - A Rubyist's Love Affair
CoffeeScript - A Rubyist's Love AffairCoffeeScript - A Rubyist's Love Affair
CoffeeScript - A Rubyist's Love AffairMark
 
Distributed Programming with Ruby/Rubyconf 2010
Distributed Programming with Ruby/Rubyconf 2010Distributed Programming with Ruby/Rubyconf 2010
Distributed Programming with Ruby/Rubyconf 2010Mark
 

More from Mark (18)

Building Go Web Apps
Building Go Web AppsBuilding Go Web Apps
Building Go Web Apps
 
Angular.js Fundamentals
Angular.js FundamentalsAngular.js Fundamentals
Angular.js Fundamentals
 
Go(lang) for the Rubyist
Go(lang) for the RubyistGo(lang) for the Rubyist
Go(lang) for the Rubyist
 
Mangling Ruby with TracePoint
Mangling Ruby with TracePointMangling Ruby with TracePoint
Mangling Ruby with TracePoint
 
AngularJS vs. Ember.js vs. Backbone.js
AngularJS vs. Ember.js vs. Backbone.jsAngularJS vs. Ember.js vs. Backbone.js
AngularJS vs. Ember.js vs. Backbone.js
 
GET /better
GET /betterGET /better
GET /better
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
Testing Your JavaScript & CoffeeScript
Testing Your JavaScript & CoffeeScriptTesting Your JavaScript & CoffeeScript
Testing Your JavaScript & CoffeeScript
 
Building an API in Rails without Realizing It
Building an API in Rails without Realizing ItBuilding an API in Rails without Realizing It
Building an API in Rails without Realizing It
 
5 Favorite Gems (Lightning Talk(
5 Favorite Gems (Lightning Talk(5 Favorite Gems (Lightning Talk(
5 Favorite Gems (Lightning Talk(
 
CoffeeScript for the Rubyist
CoffeeScript for the RubyistCoffeeScript for the Rubyist
CoffeeScript for the Rubyist
 
RubyMotion
RubyMotionRubyMotion
RubyMotion
 
Testing JavaScript/CoffeeScript with Mocha and Chai
Testing JavaScript/CoffeeScript with Mocha and ChaiTesting JavaScript/CoffeeScript with Mocha and Chai
Testing JavaScript/CoffeeScript with Mocha and Chai
 
CoffeeScript for the Rubyist
CoffeeScript for the RubyistCoffeeScript for the Rubyist
CoffeeScript for the Rubyist
 
Testing Rich Client Side Apps with Jasmine
Testing Rich Client Side Apps with JasmineTesting Rich Client Side Apps with Jasmine
Testing Rich Client Side Apps with Jasmine
 
DRb and Rinda
DRb and RindaDRb and Rinda
DRb and Rinda
 
CoffeeScript - A Rubyist's Love Affair
CoffeeScript - A Rubyist's Love AffairCoffeeScript - A Rubyist's Love Affair
CoffeeScript - A Rubyist's Love Affair
 
Distributed Programming with Ruby/Rubyconf 2010
Distributed Programming with Ruby/Rubyconf 2010Distributed Programming with Ruby/Rubyconf 2010
Distributed Programming with Ruby/Rubyconf 2010
 

Recently uploaded

Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetEnjoy Anytime
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 

Recently uploaded (20)

Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 

A Big Look at MiniTest

  • 8. #  Running  tests:   ...........................................   Finished  tests  in  1.851323s,  1.6014  tests/s,  6.7781  assertions/s.   43  tests,  182  assertions,  0  failures,  0  errors,  0  skips Tuesday, September 10, 13
  • 9. Step 1: Setup Testing Framework Tuesday, September 10, 13
  • 14. • RSpec • MiniTest • test-unit • Bacon • Riot • Wrong • Shindo • testrocket • rubydoctest • Testy • Micronaut • Kintama • dtf • assert • test_inline • Lemon • Detest Tuesday, September 10, 13
  • 16. Good Things Come in Small Packages Tuesday, September 10, 13
  • 21. require  'minitest/autorun'   class  Foo    def  add(x,  y)        x  +  y    end end   describe  Foo  do    describe  '#add'  do        it  'adds  two  numbers'  do            Foo.new.add(4,  2).must_equal  6        end    end end Tuesday, September 10, 13
  • 22. require  'minitest/autorun'   class  Foo    def  add(x,  y)        x  +  y    end end   class  TestFoo  <  MiniTest::Unit::TestCase    def  test_add        assert_equal  6,  Foo.new.add(4,  2)    end end Tuesday, September 10, 13
  • 24. IT SHIPS WITH RUBY!!! Tuesday, September 10, 13
  • 26. also available as a gem Tuesday, September 10, 13
  • 27. Familiar Syntax to RSpec or Test::Unit Tuesday, September 10, 13
  • 28. MiniTest replaced Test::Unit in 1.9 Tuesday, September 10, 13
  • 31. describe  Something  do      it  "does  something"  do          #  tests  go  here    end   end Tuesday, September 10, 13
  • 32. describe  Something  do      before  do          #  setup  code  goes  here    end      after  do          #  tear  down  code  goes  here    end      it  "does  something"  do          #  tests  go  here    end   end Tuesday, September 10, 13
  • 33. describe  Something  do      describe  'something  else'  do          it  "does  something"  do              #  tests  go  here        end      end   end Tuesday, September 10, 13
  • 34. describe  Something  do      let(:something)  {  Something.new(name:  'Widget')  }      describe  'something  else'  do          it  "does  something"  do            something.name.must_equal  'Widget'        end      end   end Tuesday, September 10, 13
  • 35. describe  Something  do      subject  {  Something.new(name:  'Widget')  }      describe  'something  else'  do          it  "does  something"  do            subject.name.must_equal  'Widget'        end      end   end Tuesday, September 10, 13
  • 36. describe  Something  do      subject  {  Something.new(name:  'Widget')  }      context  'something  else'  do          it  "does  something"  do            subject.name.must_equal  'Widget'        end      end   end Tuesday, September 10, 13
  • 37. scrap.rb:19:in  `block  in  <main>':  undefined  method  `context'  for  #<Class: 0x007fce92074b40>  (NoMethodError)                from  /Users/markbates/.../lib/minitest/spec.rb:71:in  `class_eval'                from  /Users/markbates/.../lib/minitest/spec.rb:71:in  `describe'                from  scrap.rb:15:in  `<main>' Tuesday, September 10, 13
  • 38. class  MiniTest::Spec      class  <<  self        alias  :context  :describe    end   end Tuesday, September 10, 13
  • 40. describe  Something  do      it  'does  something'      it  'does  something  else'  do        skip    end      it  'does  another  thing'  do        skip  "here's  some  reason  why"    end   end Tuesday, September 10, 13
  • 41. #  Running  tests:   SSS   Finished  tests  in  0.000912s,  3289.4737  tests/s,   0.0000  assertions/s.   3  tests,  0  assertions,  0  failures,  0  errors,  3  skips   Tuesday, September 10, 13
  • 43. • must_be • must_be_close_to • must_be_empty • must_be_instance_of • must_be_kind_of • must_be_nil • must_be_same_as • must_be_silent • must_be_within_epsilon • must_equal • must_include • must_match • must_output • must_respond_to • must_raise • must_send • must_throw Tuesday, September 10, 13
  • 44. • wont_be • wont_be_close_to • wont_be_empty • wont_be_instance_of • wont_be_kind_of • wont_be_nil • wont_be_same_as • wont_be_silent • wont_be_within_epsilon • wont_equal • wont_include • wont_match • wont_output • wont_respond_to • wont_raise • wont_send • wont_throw Tuesday, September 10, 13
  • 45. describe  Something  do      it  "does  something"  do        lambda  {nil  /  2}.must_raise  NoMethodError        ["one",  "two"].must_include  "one"        ["one",  "two"].wont_include  "three"        nil.must_be_nil        [].must_be  :empty?    end   end Tuesday, September 10, 13
  • 47. class  TestSomething  <  MiniTest::Unit::TestCase      def  test_something        #tests  go  here    end   end Tuesday, September 10, 13
  • 48. class  TestSomething  <  MiniTest::Unit::TestCase      def  setup        #  setup  code  goes  here    end      def  teardown        #  tear  down  code  goes  here    end      def  test_something        #  tests  go  here    end   end Tuesday, September 10, 13
  • 49. class  TestSomething  <  MiniTest::Unit::TestCase      def  test_something        assert  true    end      class  TestSomethingElse  <  MiniTest::Unit::TestCase            def  test_something_else            assert  true        end            end   end Tuesday, September 10, 13
  • 53. class  SomethingTest  <  MiniTest::Unit::TestCase      def  test_something        skip    end      def  test_something_else        skip  "here's  some  reason  why"    end   end Tuesday, September 10, 13
  • 54. #  Running  tests:   SS   Finished  tests  in  0.000663s,  3016.5913  tests/s,   0.0000  assertions/s.   2  tests,  0  assertions,  0  failures,  0  errors,  2  skips Tuesday, September 10, 13
  • 56. • assert • assert_block • assert_empty • assert_equal • assert_in_delta • assert_in_epsilon • assert_includes • assert_instance_of • assert_kind_of • assert_match • assert_nil • assert_operator • assert_output • assert_raises • assert_respond_to • assert_same • assert_send • assert_silent Tuesday, September 10, 13
  • 57. • refute • refute_block • refute_empty • refute_equal • refute_in_delta • refute_in_epsilon • refute_includes • refute_instance_of • refute_kind_of • refute_match • refute_nil • refute_operator • refute_output • refute_raises • refute_respond_to • refute_same • refute_send • refute_silent Tuesday, September 10, 13
  • 60. describe  Something  do      let(:something)  {  MiniTest::Mock.new  }      it  "does  something"  do        something.expect(:name,  'Widget')        something.name.must_equal  'Widget'        something.verify    end   end Tuesday, September 10, 13
  • 61. describe  Something  do      let(:something)  {  MiniTest::Mock.new  }      it  "does  something"  do        something.expect(:name,  'Widget')        something.verify    end   end Tuesday, September 10, 13
  • 62. #  Running  tests:   E   Finished  tests  in  0.000858s,  1165.5012  tests/s,  0.0000   assertions/s.      1)  Error: OpenStruct#test_0001_does  something: MockExpectationError:  expected  name()  =>  "Widget",  got  []        scrap.rb:22:in  `block  (2  levels)  in  <main>'   1  tests,  0  assertions,  0  failures,  1  errors,  0  skips   Tuesday, September 10, 13
  • 63. describe  Something  do      let(:something)  {  Something.new(name:  'Widget')  }      it  "does  something"  do        something.stub(:name,  'Thingy')  do            something.name.must_equal  'Thingy'        end    end   end Tuesday, September 10, 13
  • 65. describe  "Something"  do      let(:something)  {  OpenStruct.new(name:  'Widget')  }      it  "does  something"  do        something.name.must_equal  'Widget'    end   end Tuesday, September 10, 13
  • 66. describe  Something  do      let(:something)  {  Something.new(name:  'Widget')  }      it  "does  something"  do        def  something.name            "Thingy"        end        something.name.must_equal  'Thingy'    end   end Tuesday, September 10, 13
  • 67. Mocha, RR, FlexMock Tuesday, September 10, 13
  • 69. describe  Something  do      it  "does  something"  do        1.2.must_round_to  1        1.7.wont_round_to  1    end   end Tuesday, September 10, 13
  • 70. module  MiniTest::Assertions      def  assert_equals_rounded(rounded,  decimal)        assert  rounded  ==  decimal.round,  "Expected  #{decimal}  to  round  to  #{rounded}"    end      def  refute_equals_rounded(rounded,  decimal)        assert  rounded  !=  decimal.round,  "Expected  #{decimal}  to  not  round  to  #{rounded}"    end   end   Numeric.infect_an_assertion  :assert_equals_rounded,  :must_round_to Numeric.infect_an_assertion  :refute_equals_rounded,  :wont_round_to Tuesday, September 10, 13
  • 71. describe  Something  do      it  "does  something"  do        1.2.must_round_to  1        1.7.wont_round_to  1    end   end Tuesday, September 10, 13
  • 74. ENV["RAILS_ENV"]  =  "test" require  File.expand_path("../../config/environment",  __FILE__) require  "rails/test_help" require  "minitest/rails"   #  Add  `gem  "minitest-­‐rails-­‐capybara"`  to  the  test  group  of  your  Gemfile #  and  uncomment  the  following  if  you  want  Capybara  feature  tests #  require  "minitest/rails/capybara"   module  MiniTest::Expectations    infect_an_assertion  :assert_redirected_to,  :must_redirect_to    infect_an_assertion  :assert_template,  :must_render_template    infect_an_assertion  :assert_response,  :must_respond_with end   class  ActiveSupport::TestCase      #  Add  more  helper  methods  to  be  used  by  all  tests  here...    before  do    end      after  do    end   end Tuesday, September 10, 13
  • 75. rake  minitest                              #  Run  default  tests rake  minitest:all                      #  Run  all  tests rake  minitest:all:quick          #  Run  all  tests,  ungrouped  for  quicker  execution rake  minitest:controllers      #  Runs  tests  under  test/controllers rake  minitest:lib                      #  Runs  tests  under  test/lib rake  minitest:models                #  Runs  tests  under  test/models Tuesday, September 10, 13
  • 76. task  :mt  =>  'minitest:all:quick' Rake::Task["default"].clear task  :default  =>  :mt Tuesday, September 10, 13
  • 77. ruby  -­‐I  test  test/models/user_test.rb Tuesday, September 10, 13
  • 78. describe  FeedController  do      describe  '#index'  do          it  'renders  an  atom  feed'  do            get  :index              must_render_template  :index        end          it  'redirects  from  an  RSS  feed'  do            get  :index,  format:  'rss'              must_redirect_to  feed_path(format:  :atom)        end      end   end Tuesday, September 10, 13
  • 80. guard  :minitest  do    watch(%r|^app/controllers/(.*).rb|)  {  |m|  "test/controllers/#{m[1]}_test.rb"  }    watch(%r|^app/helpers/(.*).rb|)          {  |m|  "test/helpers/#{m[1]}_test.rb"  }    watch(%r|^app/models/(.*).rb|)            {  |m|  "test/models/#{m[1]}_test.rb"  }    watch(%r{^test/test_helper.rb})          {  'test'  }    watch(%r{^test/.+_test.rb})    watch(%r{^app/(.+).rb})                                                              {  |m|  "test/#{m[1]}_test.rb"  }    watch(%r{^app/controllers/application_controller.rb})  {  'test/controllers'  }    watch(%r{^lib/(.+).rb})                                                              {  |m|  "test/lib/#{m[1]}_test.rb"  } end Tuesday, September 10, 13
  • 84. feature  "Can  Access  Home"  do      scenario  "has  content"  do        visit  root_path        assert  page.has_content?("Home#index")    end     end Tuesday, September 10, 13
  • 87. 95% of RSpec Tuesday, September 10, 13
  • 89. rspec  (2.14.1)    rspec-­‐core  (~>  2.14.0)    rspec-­‐expectations  (~>  2.14.0)    rspec-­‐mocks  (~>  2.14.0) rspec-­‐core  (2.14.5) rspec-­‐expectations  (2.14.2)    diff-­‐lcs  (>=  1.1.3,  <  2.0) Tuesday, September 10, 13
  • 90. Ships with Ruby! Tuesday, September 10, 13
  • 91. • https://github.com/seattlerb/minitest • http://www.mattsears.com/articles/2011/12/10/minitest-quick-reference • http://blog.arvidandersson.se/2012/03/28/minimalicous-testing-in-ruby-1-9 • https://github.com/blowmage/minitest-rails-capybara • https://github.com/guard/guard-minitest • https://github.com/qrush/m • http://www.metacasts.tv/casts/minitest-spec • http://www.metacasts.tv/casts/minitest-rails • http://www.metacasts.tv/casts/testing-sinatra Tuesday, September 10, 13