private Long itemId;
private String longName;
private String shortName;
private String itemUrl;
private Integer itemCount;
private Long parentCategory;
private Long childCategory;
private Integer shopType;
private Integer payPostage;
private Long originalPrice;
private String picUrl;
private Long activityPrice;
private String city;
private String itemDesc;
private Integer itemStatus;
private String itemGuarantee;
private Double discount;
private String checkComment;
private Long platformId;
private Long sellerId;
private String sellerNick;
private Integer sellerCredit;
private Long categoryId;
private Long operatorId;
private String operatorNick;
private String sellerEmail;
private String sellerPhone;
private String sellerAddress;
private String sellerShopUrl;
private String sellerRealName;
private String picUrlFromIC;
private Integer itemType;
private Integer tgType;
private String attributes;
private Integer isAuth = 0;
private String[] itemCities;
private Integer isBlack = 0;
private double lowestPirce;
private transient int pollNum;
private Integer limitNum;
这是我拥有的对象
当我测试一个select操作时(从mysql中选择对象)。
我应该验证这个对象的每个属性吗?
什么是测试此类数据访问操作的最佳方法(我目前正在使用dbunit)
答案 0 :(得分:2)
我应该验证这个对象的每个属性吗?
是的,你应该。否则,您将部分验证对象的状态,可能导致未验证属性的未指定数据。
测试此类数据访问操作的最佳方法是什么(我目前正在使用dbunit)
断言实际数据集/表格内容与预定数据集/表格内容的相等性。 how-to guide of DbUnit中介绍了这一点。这对涉及INSERT
,DELETE
或UPDATE
的变更操作有意义。
对于SELECT
操作,您可以断言实际对象和预期对象中的值,或者将对象的属性读取到Map中,并将其与预期的Map进行比较。如果您已实现equals()
(和hashcode()
)来考虑所有对象属性,则assertEquals()
应足以验证对象是否相等。如果您尚未实现equals()
以考虑所有对象的属性是否相等,则可以使用assertThat()
方法,使用自定义匹配器来验证对象属性是否相等。
此外,如果您有多个此类测试具有DAO操作的已知输入集和DAO操作后的预期数据集/表内容,则可以考虑parameterizing the tests,以便仅定义测试序列一次,但是测试是使用不同的输入多次执行的,并且系统被声明为具有不同的预期输出。
答案 1 :(得分:1)
assertEquals
应该可以正常工作。 (我认为这需要你恰当地覆盖equals
方法。)
答案 2 :(得分:0)
从数据库中测试选择操作可能是有益的,特别是如果涉及某些orm或复杂的选择查询。
我相信你主要关注的是确保当你改变这个类时,如果数据库映射仍然没有问题,它将不会破坏你的单元测试。您可以实现非常通用的字段比较机制(如所有字段上的自定义equals方法)或使用现有的一个 - 例如来自Apache Commons的EqualsBuilder.reflectionEquals。
答案 3 :(得分:0)
如果您觉得存在忘记加载其中一个属性或替换其中两个属性的风险,那么一定要对其进行测试。
如果您认为它永远不会发生,请不要对其进行测试,并等待发生错误。如果发生这种情况,请引入由于此错误而失败的单元测试,修复错误,并验证单元测试不再失败。
简而言之:没有绝对的规则,由你来决定