我有一个函数foo(),它反过来调用函数bar()。如何确认实际调用了该栏?
要测试的复杂业务逻辑方法的示例:
class Car
{
IStarter starter
IKeyhole keyhole
IBrakePedal pedal
Drive()
{
keyhole.InsertKey()
keyhole.RotateToStart()
starter.TurnEngineOver()
...
if (pedal.Pressed)
this.SlowDown()
}
}
我有一个方法,它汇集了6个外部依赖项(与方法的接口),并按顺序运行它们,顺序并不重要。我想确保每个人都被召唤。在另一个测试中,我想调整条件并确保调用子集。
在使用Moq的C#中,我有一整页设置代码。
以下是我希望在单元测试中看到的内容:
let `check that brake pedal slows down car` =
let car = new Car()
car.pedal.Pressed <- true
car.Drive()
car.SlowDown |> wasCalled
其余部分应从使用中推断出来。我真的需要减少测试中的噪音。
答案 0 :(得分:2)
我所知道的最接近你想要的是AutoMockingContainer。
简而言之,它是一个IoC容器,可以为您提供一辆Car,其中包含所有IStarter,IKeyhole,IBrakepedal,并将其连接到Car实例,而无需您明确注册其中任何一个。然后你像往常一样设定你的期望(在你的情况下,“car.SlowDown()被调用”),然后调用被测试的方法。
具体取决于所使用的IoC容器和模拟框架。最初的版本是用Windsor和旧版本的Rhino Mocks编写的,但现在有StructureMap,Ninject,Autofac + Moq等AMC。
你可以从其中一个开始并将其包装起来,使它在F#中更加惯用。