3

是否可以使用 FakeItEasy 创建一个正在测试的类,其中在构造函数中声明的所有依赖项都使用 fakes 自动初始化?

想象一下这个类:

public class Inserting
{
    public Inserting(
        ITransactionService transactionService,
        ISharedData sharedData)
    {
        TransactionService = transactionService;
        SharedData = sharedData;
    }

    public ITransactionService TransactionService { get; }

    public ISharedData SharedData { get; }

    public void Enter()
    {
        TransactionService.StartTransaction();
    }
}

然后我在测试设置中创建所有假对象,并用这些假对象构建我的测试类:

public class InsertingTest
{
    private Inserting _inserting;
    private ISharedData _fakeSharedData;
    private ITransactionService _fakeTransactionService;        

    [SetUp]
    public void SetUp()
    {
        _fakeTransactionService = A.Fake<ITransactionService>();
        _fakeSharedData = A.Fake<ISharedData>();

        _inserting = new Inserting(_fakeTransactionService, _fakeSharedData);
    }

    [Test]
    public void TestEnter()
    {
        // Arrange

        // Act
        _inserting.Enter();

        // Assert
        A.CallTo(() => _fakeTransactionService.StartTransaction().MustHaveHappened();
    }
}

但我在 Java 世界中看到,使用 Mockito 和 Dagger 2 时,您可以执行以下操作:

public class PhoneDialer {
    private Activity activity;
    private PhoneCallListener phoneCallListener;

    @Inject
    public PhoneDialer(Activity activity, PhoneCallListener phoneCallListener) {
        this.activity = activity;
        this.phoneCallListener = phoneCallListener;
    }
}

public class PhoneDialerTest {
    @Rule
    public MockitoRule mockitoRule = MockitoJUnit.rule();

    @Mock
    PhoneCallListener phoneCallListener;

    @Mock
    Activity activity;

    @InjectMocks
    PhoneDialer dialer;

    @Test
    public void test_dialer() throws Exception {
        // Arrange

        // Act
        dialer.callNumber("abc");

        // Assert
        Mockito.verify(phoneCallListener, times(1)).startCall();
    }
}

并且模拟的类会用假货自动初始化。在 C# 中是否有与 FakeItEasy 等效的过程或函数?

4

1 回答 1

4

我认为您想要 使用 FakeItEasy 在测试夹具中自动注入假货之类的东西。您使用[Fake]标记要注入的假货和[UnderTest]标记要测试的生产类型。

我们真的应该把它放到文档中。

或者,

于 2017-01-10T16:19:13.383 回答