它(几乎)我第一次尝试通过TDD原则创建代码。但是我有麻烦如何开始。
例如:我想改变一些人的一些信息。
为了方便起见,一个人只有这些价值: - 名字 - 姓 - 电子邮件
最后我需要的是: - 一个人DTO - 一个人实体(Nhibernate) - 将dto值存储在数据库中的功能。最后,我需要返回一个成功或错误(可能是一个布尔值)。
根据给定的信息,如何开始?这是一个全球性的问题,但那是因为我不知道如何开始。我发了很多文章,但不知怎的,我已经被卡住了。
编辑: - 我正在使用MVC:MVC将返回DTO(从表单字段填充)。
所以MVC启动调用可能是这样的:
public JsonResult MutatePerson(PersonDto person){
//Call functions by TDD here
return Json(true);
}
答案 0 :(得分:0)
您已经描述了所涉及的对象,但不操作。
大概你需要read()
操作,write()
操作。也许list()
操作?
以上所有都应该有与之相关的测试,例如
testCanReadViaId();
testCanThrowExceptionOnReadingInvalidId();
testCanWrite();
等
对于大量工作,您应该模拟您的数据源等,并在您的persistenc elayer下定位(比如说)硬编码数据,这样您就不会依赖数据库了。但是对于像上面这样的东西,我肯定会测试基本的数据库交互。
因此,您可能需要(最初)针对具有固定数据的数据库指出测试套件。如果您想要更灵活,那么您的测试设置代码可以在运行测试之前首先将实体写入数据库。
您的测试应该测试不同的数据和操作排列,例如在上面我提出了一个测试,通过一个有效的id(比如1)和一个针对无效id(比如-1)的类似操作来读取一个对象。您可能还想检查不同的数据组合(例如,如果未填充电子邮件地址,一切都有效 - 如果数据库列可以为空,这可能有效)
答案 1 :(得分:0)
使用TDD,您应该使用interfaces作为参数。可以模拟接口,并使用模拟测试MutatePerson方法,并且仅测试。在单元测试中,您只想测试方法如何对输入做出反应,而不是测试对象对方法的反应。如果您测试DTO对象的行为方式,那么您正在编写集成测试。
因此,使用PersonDto
的接口(如果不存在则创建一个)。并将其用作方法参数而不是具体类。
答案 2 :(得分:0)
这可能只是我,但我觉得你开始时并不知道你的全局系统在层,模块以及它们之间的依赖关系和交互方面应该是什么样的。
TDD的紧急设计确实可以在小对象图的水平上运行,但是如果不首先进行一些总体架构设计(不是很大的前期设计,但足以让你入门),你就无法逃脱。考虑到这一点,我认为你对测试的内容有了更好的了解。
一旦你明白了,我认为你应该:
了解面向对象的单元测试技术,单元测试我的意思是单独测试 。 Roy Osherove的Art Of Unit Testing是开发.NET开发人员的绝佳起点。
了解架构级TDD策略。通过您阅读的文章,您当然知道如何在小型方面进行TDD,但您需要一种更全面的方法:首先应该以什么顺序进行TDD等等。像GOOS这样的书可能对您有所帮助在该部门。