-
Notifications
You must be signed in to change notification settings - Fork 268
/
Copy pathReturnsAndDoes.cs
72 lines (60 loc) · 2.14 KB
/
ReturnsAndDoes.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using System.Collections.Generic;
using NUnit.Framework;
namespace NSubstitute.Acceptance.Specs
{
public class ReturnsAndDoes
{
public interface IFoo { IBar GetBar(int i); }
public interface IBar { }
private IFoo sub;
[SetUp]
public void SetUp()
{
sub = Substitute.For<IFoo>();
}
[Test]
public void Set_callback_via_extension_method()
{
var bar = Substitute.For<IBar>();
var wasCalled = false;
sub.GetBar(2).Returns(bar).AndDoes(x => wasCalled = true);
sub.GetBar(1);
Assert.That(wasCalled, Is.False);
var result = sub.GetBar(2);
Assert.That(result, Is.EqualTo(bar));
Assert.That(wasCalled, Is.True);
}
[Test]
public void Add_multiple_callbacks_and_ignore_args()
{
var bar = Substitute.For<IBar>();
var wasCalled = false;
var argsUsed = new List<int>();
sub.GetBar(2)
.ReturnsForAnyArgs(bar)
.AndDoes(x => wasCalled = true)
.AndDoes(x => argsUsed.Add(x.Arg<int>()));
var result1 = sub.GetBar(42);
var result2 = sub.GetBar(9999);
Assert.That(wasCalled, Is.True);
Assert.That(argsUsed, Is.EquivalentTo(new[] {42, 9999}));
Assert.AreSame(result1, bar);
Assert.AreSame(result2, bar);
}
[Test]
public void Interaction_with_other_callback_methods()
{
var calledViaWhenDo = false;
var calledViaArgDo = false;
var calledViaAndDoes = false;
sub.GetBar(2).Returns(Substitute.For<IBar>()).AndDoes(x => calledViaAndDoes = true);
sub.When(x => x.GetBar(2)).Do(x => calledViaWhenDo = true);
sub.GetBar(Arg.Do<int>(x => calledViaArgDo = true));
Assert.False(calledViaAndDoes && calledViaArgDo && calledViaWhenDo);
sub.GetBar(2);
Assert.That(calledViaAndDoes);
Assert.That(calledViaArgDo);
Assert.That(calledViaWhenDo);
}
}
}