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])