flexmock 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG CHANGED
@@ -2,7 +2,11 @@
2
2
 
3
3
  = Changes for FlexMock
4
4
 
5
- == Pre-Version 0.4.2
5
+ == Version 0.4.3
6
+
7
+ * Fixed bug where non-direct class methods were not properly handled.
8
+
9
+ == Version 0.4.2
6
10
 
7
11
  * Fixed bug where multiple stubs of a class method were not
8
12
  properly restored.
data/README CHANGED
@@ -3,7 +3,7 @@
3
3
  FlexMock is a simple, but flexible, mock object library for Ruby unit
4
4
  testing.
5
5
 
6
- Version :: 0.4.2
6
+ Version :: 0.4.3
7
7
 
8
8
  = Links
9
9
 
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ require 'rake/testtask'
9
9
  CLEAN.include('*.tmp')
10
10
  CLOBBER.include("html", 'pkg')
11
11
 
12
- PKG_VERSION = '0.4.2'
12
+ PKG_VERSION = '0.4.3'
13
13
 
14
14
  PKG_FILES = FileList[
15
15
  '[A-Z]*',
@@ -0,0 +1,87 @@
1
+ = FlexMock 0.4.2 Released
2
+
3
+ FlexMock is a flexible mocking library for use in Ruby's Test::Unit
4
+ test framework. Version 0.4.0 enhances FlexMock with the ability to
5
+ stub and mock methods in existing objects.
6
+
7
+ == New in 0.4.2
8
+
9
+ Release 0.4.2 contains a fix for multiple definitions of a class
10
+ method stub so that the correct original definition is retained.
11
+
12
+ == What is FlexMock?
13
+
14
+ FlexMock is a flexible Ruby mocking library that works with Ruby's
15
+ Test::Unit framework to create easy to use mocks.
16
+
17
+ === Features
18
+
19
+ * Easy integration with Test::Unit. Mocks created with the flexmock
20
+ method are automatically verified at the end of the test.
21
+
22
+ * A fluent interface that allows mock behavior to be specified very
23
+ easily.
24
+
25
+ * A "record mode" where an existing implementation can record its
26
+ interaction with a mock for later validation against a new
27
+ implementation.
28
+
29
+ * Easy mocking of individual methods in existing, non-mock objects.
30
+
31
+ === Example
32
+
33
+ Suppose you had a Dog object that wagged a tail when it was happy.
34
+ Something like this:
35
+
36
+ class Dog
37
+ def initialize(a_tail)
38
+ @tail = a_tail
39
+ end
40
+ def happy
41
+ @tail.wag
42
+ end
43
+ end
44
+
45
+ To test the +Dog+ class without a real +Tail+ object (perhaps because
46
+ real +Tail+ objects activate servos in some robotic equipment), you
47
+ can do something like this:
48
+
49
+ require 'test/unit'
50
+ require 'flexmock'
51
+
52
+ class TestDog < Test::Unit::TestCase
53
+ include FlexMock::TestCase
54
+
55
+ def test_dog_wags_tail_when_happy
56
+ tail = flexmock("tail")
57
+ tail.should_receive(:wag).once
58
+ dog = Dog.new(tail)
59
+ dog.happy
60
+ end
61
+ end
62
+
63
+ FlexMock will automatically verify that the mocked tail object
64
+ received the message +wag+ exactly one time. If it doesn't, the test
65
+ will not pass.
66
+
67
+ See the FlexMock documentation at
68
+ http://onestepback.org/software/flexmock for details on specifying
69
+ arguments and return values on mocked methods, as well as a simple
70
+ technique for mocking tail objects when the Dog class creates the tail
71
+ objects directly.
72
+
73
+ == Availability
74
+
75
+ FlexMock is distributed with Rails, or you can make sure you have the
76
+ latest version with a quick RubyGems command:
77
+
78
+ gem install flexmock (you may need root/admin privileges)
79
+
80
+ Otherwise, you can get it from the more traditional places:
81
+
82
+ Download:: http://rubyforge.org/project/showfiles.php?group_id=170
83
+
84
+ You will find documentation at:
85
+ http://onestepback.org/software/flexmock/
86
+
87
+ -- Jim Weirich
@@ -0,0 +1,87 @@
1
+ = FlexMock 0.4.3 Released
2
+
3
+ FlexMock is a flexible mocking library for use in Ruby's Test::Unit
4
+ test framework. Version 0.4.0 enhances FlexMock with the ability to
5
+ stub and mock methods in existing objects.
6
+
7
+ == New in 0.4.3
8
+
9
+ Release 0.4.3 contains a fix for handling non-direct class methods
10
+ properly (bug report from Scott Barron).
11
+
12
+ == What is FlexMock?
13
+
14
+ FlexMock is a flexible Ruby mocking library that works with Ruby's
15
+ Test::Unit framework to create easy to use mocks.
16
+
17
+ === Features
18
+
19
+ * Easy integration with Test::Unit. Mocks created with the flexmock
20
+ method are automatically verified at the end of the test.
21
+
22
+ * A fluent interface that allows mock behavior to be specified very
23
+ easily.
24
+
25
+ * A "record mode" where an existing implementation can record its
26
+ interaction with a mock for later validation against a new
27
+ implementation.
28
+
29
+ * Easy mocking of individual methods in existing, non-mock objects.
30
+
31
+ === Example
32
+
33
+ Suppose you had a Dog object that wagged a tail when it was happy.
34
+ Something like this:
35
+
36
+ class Dog
37
+ def initialize(a_tail)
38
+ @tail = a_tail
39
+ end
40
+ def happy
41
+ @tail.wag
42
+ end
43
+ end
44
+
45
+ To test the +Dog+ class without a real +Tail+ object (perhaps because
46
+ real +Tail+ objects activate servos in some robotic equipment), you
47
+ can do something like this:
48
+
49
+ require 'test/unit'
50
+ require 'flexmock'
51
+
52
+ class TestDog < Test::Unit::TestCase
53
+ include FlexMock::TestCase
54
+
55
+ def test_dog_wags_tail_when_happy
56
+ tail = flexmock("tail")
57
+ tail.should_receive(:wag).once
58
+ dog = Dog.new(tail)
59
+ dog.happy
60
+ end
61
+ end
62
+
63
+ FlexMock will automatically verify that the mocked tail object
64
+ received the message +wag+ exactly one time. If it doesn't, the test
65
+ will not pass.
66
+
67
+ See the FlexMock documentation at
68
+ http://onestepback.org/software/flexmock for details on specifying
69
+ arguments and return values on mocked methods, as well as a simple
70
+ technique for mocking tail objects when the Dog class creates the tail
71
+ objects directly.
72
+
73
+ == Availability
74
+
75
+ FlexMock is distributed with Rails, or you can make sure you have the
76
+ latest version with a quick RubyGems command:
77
+
78
+ gem install flexmock (you may need root/admin privileges)
79
+
80
+ Otherwise, you can get it from the more traditional places:
81
+
82
+ Download:: http://rubyforge.org/project/showfiles.php?group_id=170
83
+
84
+ You will find documentation at:
85
+ http://onestepback.org/software/flexmock/
86
+
87
+ -- Jim Weirich
data/lib/flexmock.rb CHANGED
@@ -971,7 +971,6 @@ class FlexMock
971
971
  def initialize(obj, mock)
972
972
  @obj = obj
973
973
  @mock = mock
974
- @methods_to_restore = []
975
974
  @method_definitions = {}
976
975
  @methods_proxied = []
977
976
  end
@@ -980,9 +979,6 @@ class FlexMock
980
979
  # mock object handle should_receive.
981
980
  def should_receive(method_name)
982
981
  method_name = method_name.to_sym
983
- if @obj.methods.include?(method_name.to_s)
984
- @methods_to_restore << method_name
985
- end
986
982
  unless @methods_proxied.include?(method_name)
987
983
  hide_existing_method(method_name)
988
984
  @methods_proxied << method_name
@@ -999,9 +995,9 @@ class FlexMock
999
995
  # Remove all traces of the mocking framework from the existing object.
1000
996
  def mock_teardown
1001
997
  if ! detached?
1002
- @methods_to_restore.each do |method_name|
998
+ @methods_proxied.each do |method_name|
1003
999
  remove_current_method(method_name)
1004
- restore_original_definition(method_name) if @method_definitions[method_name]
1000
+ restore_original_definition(method_name)
1005
1001
  end
1006
1002
  @obj.instance_variable_set("@flexmock_proxy", nil)
1007
1003
  @obj = nil
@@ -1060,7 +1056,7 @@ class FlexMock
1060
1056
  # Remove the current method if it is a singleton method of the
1061
1057
  # object being mocked.
1062
1058
  def remove_current_method(method_name)
1063
- sclass.class_eval { remove_method(method_name) }
1059
+ sclass.class_eval { remove_method(method_name) }
1064
1060
  end
1065
1061
 
1066
1062
  # Have we been detached from the existing object?
@@ -58,7 +58,6 @@ class TestStubbing < Test::Unit::TestCase
58
58
  stub_proxy.mock_teardown
59
59
  assert_equal :woof, dog.bark
60
60
  assert_equal nil, dog.instance_variable_get("@flexmock_proxy")
61
- assert ! dog.methods.include?("flexmock_old_bark")
62
61
  end
63
62
 
64
63
  def test_original_missing_behavior_can_be_restored
@@ -119,6 +118,14 @@ class TestStubbing < Test::Unit::TestCase
119
118
  assert_equal "hello3", obj.hi(3)
120
119
  end
121
120
 
121
+ def test_original_behavior_is_restored_on_nonsingleton_methods_with_multiple_stubs
122
+ flexstub(File).should_receive(:open).with("foo").once.and_return(:ok)
123
+ flexstub(File).should_receive(:open).with("bar").once.and_return(:ok)
124
+
125
+ assert_equal :ok, File.open("foo")
126
+ assert_equal :ok, File.open("bar")
127
+ end
128
+
122
129
  def test_original_behavior_is_restored_even_when_errors
123
130
  flexstub(Dog).should_receive(:create).once.and_return(:mock)
124
131
  flexmock_teardown rescue nil
metadata CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.0.6
3
3
  specification_version: 1
4
4
  name: flexmock
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.4.2
6
+ version: 0.4.3
7
7
  date: 2006-10-18 00:00:00 -04:00
8
8
  summary: Simple and Flexible Mock Objects for Testing
9
9
  require_paths:
@@ -46,6 +46,8 @@ files:
46
46
  - install.rb
47
47
  - doc/releases/flexmock-0.4.0.rdoc
48
48
  - doc/releases/flexmock-0.4.1.rdoc
49
+ - doc/releases/flexmock-0.4.2.rdoc
50
+ - doc/releases/flexmock-0.4.3.rdoc
49
51
  test_files: []
50
52
 
51
53
  rdoc_options:
@@ -59,6 +61,8 @@ extra_rdoc_files:
59
61
  - CHANGELOG
60
62
  - doc/releases/flexmock-0.4.0.rdoc
61
63
  - doc/releases/flexmock-0.4.1.rdoc
64
+ - doc/releases/flexmock-0.4.2.rdoc
65
+ - doc/releases/flexmock-0.4.3.rdoc
62
66
  executables: []
63
67
 
64
68
  extensions: []