我想了解国家基础/交互测试的定义(读福勒的东西,等等)。 我发现,我开始基于状态的,但更多的互动基础一直在做,我得到了如何测试某些事情有点困惑。
我在MVC控制器和行动电话服务拒绝包:
public ActionResult Deny(int id)
{
service.DenyPackage(id);
return RedirectToAction("List");
}
这似乎昭示着我。 提供一个模拟服务,验证它是正确调用,完成。
现在,我有一个观点,即让用户的证书与包关联的动作:
public ActionResult Upload(int id)
{
var package = packageRepository.GetPackage(id);
var certificates = certificateRepository.GetAllCertificates();
var view = new PackageUploadViewModel(package, certificates);
return View(view);
}
这一次我有点难倒。 我做的规格样式的测试(可能是不正确的),所以测试这个方法我有一个类,然后两个测试:验证包库叫,验证证书库被调用。 其实我是想第三个测试,以验证该构造函数被调用,但不知道该怎么做! 我得到的印象,这是完全错误的。
因此,对于基于状态的测试中,我将通过在ID,然后测试的ActionResult的看法。 好吧,这是有道理的。 但不会我对PackageUploadViewModel构造一个测试? 所以,如果我在构造一个测试,然后我的一部分将只是想确认我调用构造函数和动作相匹配的回报是什么构造函数返回。
现在,我能想到的另一个选择是我有一个PackageUploadViewModelBuilder(或者同样默默命名)具有在两个仓库的依赖,然后我只是通过将ID CreateViewModel方法什么的。 然后,我可以嘲笑这个对象,验证一切,并很高兴。 但是......嗯......看来奢侈。 我正在做一些简单的...不是简单的。 此外,controller.action(ID)返回builder.create(ID)似乎是增加了一层无缘无故(控制器负责构建视图模型..吧?)
我不知道......我想更多的基于状态的测试是必要的,但我怕如果我开始测试的返回值那么如果A法可以得到所谓的在8个不同的上下文中,我将有一个测试爆炸了很多重复。 我一直在使用基于交互测试,通过一些这些上下文方法B,使所有我需要做的就是验证方法A调用方法B和我有方法B测试,因此方法A可以只相信那些上下文处理。 因此,基于交互测试正在建设的测试,但基于状态的测试是要压平了一些这个层次。
我不知道如果作出任何意义。
哇,这是长...