using System.Collections.Generic;
using System.Collections;
new AutoRun().Execute(new[]{"--nocolor"});
public abstract class AbstractGenerator
public abstract IEnumerable<int> Generate();
public class ConcreteAbstract : AbstractGenerator
public override IEnumerable<int> Generate() => [2, 3, 4];
public interface IGenerator
IEnumerable<int> Generate();
public class ConcreteInterface : IGenerator
public IEnumerable<int> Generate() => [2, 3, 4];
public void TestWithAbstract()
var generator = Substitute.For<AbstractGenerator>();
generator.Generate().Returns([1, 2, 3]);
Assert.That(Sum(generator), Is.EqualTo(6));
public void TestWithConcreteAbstract()
var generator = Substitute.For<ConcreteAbstract>();
generator.Generate().Returns([1, 2, 3]);
Assert.That(Sum(generator), Is.EqualTo(6));
public void TestWithInterface()
var generator = Substitute.For<IGenerator>();
generator.Generate().Returns([1, 2, 3]);
Assert.That(Sum(generator), Is.EqualTo(6));
public void TestWithConcreteInterface()
var generator = Substitute.For<ConcreteInterface>();
generator.Generate().Returns([1, 2, 3]);
Assert.That(Sum(generator), Is.EqualTo(6));
private static int Sum(AbstractGenerator generator) => generator.Generate().Sum();
private static int Sum(IGenerator generator) => generator.Generate().Sum();