Partial Doubles
A Partial Double is the same thing as a normal Double except all methods retain their functionality by default.
You can create Partial Doubles for scripts, packed scenes, and inner classes. It works the same way as double
works, so read up on that and then apply all that new knowledge to partial_double
.
Under the covers, whether you call double
or partial_double
, GUT makes the same thing. If you call partial_double
though, it will setup the object’s methods to be stubbed to_call_super
instead of not being stubbed at all.
After you have your partial double, you can stub methods to return values instead of doing what they normally do. You can also spy on any of the methods.
NOTE All Doubles and Partial Doubles are freed when a test finishes. This means you do not have to free them manually and you should not be created in before_all
or referenced in after_all
.
Script Example
Given
# res://foo.gd
extends Node2D
var _value = 10
func set_value(val):
_value = val
func get_value():
return _value
Then
var Foo = load('res://script.gd')
func test_things():
var partial = partial_double(Foo).new()
stub(partial, 'set_value').to_do_nothing()
partial.set_value(20) # stubbed so implementation bypassed.
# since set_value was stubbed, and get_value was not, and since
# this is a partial stub, then the original functionality of
# get_value will be executed and _value is returned.
assert_eq(partial.get_value(), 10)
# unstubbed partial methods can be spied on.
assert_called(partial, 'get_value')
# stubbed methods can be spied on as well
assert_called(partial, 'set_value', [20])