我真的不知道怎么写“独立”的行为测试。
E.G。用户可以在地址簿中添加地址。
所以我有一本地址簿课。我写了一个测试来添加一个地址。但是如何在不调用“显示地址”方法的情况下验证地址是否成功写入?当我调用“显示地址”方法时,我依赖于显示方法的功能和工作。即便如此,是不是在一次测试中测试两种行为?
或者,如果我深入数据库进行验证,是不是将“行为”与执行相关联?
答案 0 :(得分:0)
听起来你在某个时候将地址保存到数据库,暗示要么
a)地址簿需要以某种方式公开添加的地址 - 通过" GetAddresses"方法,或者" AddedAddresses"公共财产 - 所以他们可以被其他一些物体拾起并保存(听起来很可能来自你所说的);或
b)你有某种" Save"触发地址簿类的方法,该方法触发将地址保存到数据库的操作,这意味着在地址簿类中,您依赖于某些其他对象,例如存储库或数据访问类。如果a),则需要调用该方法或属性以确保按预期添加地址。如果b),那么你可以向地址簿提供一个假的dataaccess类,在那个假的上面公开一个公共财产,调用" Save"地址簿上的方法,并对公众进行验证"地址"伪数据访问类的属性,如下所示:
(你没有提到语言所以这只是伪代码)
class addressbook
private _dataAccess
private addresses
constructor (dataaccess) _dataAccess = dataAccess
public method AddAddress(address) addresses.add(address)
public method save() _dataaccess.save(addresses)
class fakedataaccess
public addresses
public method save(addresses) addresses = addresses
{test}
public test AddingAddressesWorks
fake = new fakedataaccess
book = new addressbook(fake)
// Do stuff to add addresses to addressbook
book.save
assert fake.addresses == the_addresses_i_added
希望这是有道理的。你也可以通过模拟实现这一点,但这超出了我的伪代码范围,并且概念无论如何都是一样的。
但不管怎样,你是对的,你需要调用别的东西(因此可能会说你正在测试另一个构造)以验证你想要验证的内容。
就个人而言,如果是我,我会把公众"地址"地址簿上的财产。