是否可以使用 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 等效的过程或函数?