在单元测试覆盖范围内要考虑什么?

时间:2016-02-19 05:07:03

标签: .net unit-testing sonarqube code-coverage mstest

我有一个包含数据,数据访问和服务组件的C#Entity Framework项目。 Config管理员启用了代码覆盖率(Sonarqube),目前显示数据和数据访问组件的覆盖率为0%。

1)尽管为服务组件的类方法编写的MSTest单元测试代码正在执行类似 - >的操作。学生s =新学生()(学生是数据组件中的公共课)我认为它不会被视为数据组件的覆盖线?我验证了即使编写一个虚拟测试来检查是否在新的测试方法中调用构造函数,它仍然将无逻辑数据类Student标记为未覆盖。这是预期的吗?

2)实体框架数据组件几乎没有业务逻辑,因为它只有流畅的api配置类,存储库和工作单元类,它们不依靠自己的逻辑并依赖于基础实现。对我来说,似乎无法对数据访问组件进行单元测试。

有了上述观点,请问配置团队是否排除参与代码覆盖率指标的数据和访问组件是否正确?

2 个答案:

答案 0 :(得分:0)

我不能代表你提到的技术,特别是考虑到你没有提到编写代码的语言。我的经验是Java,Objective-C和Swift。

根据我的经验,获得80%以上的代码覆盖率并不太难。特别是如果您可以应用一个好的模拟框架来协助您的测试用例。

如果你的测试覆盖工具告诉你尽管执行了构造函数你有0%的覆盖率,那么我会建议两件事之一。所涉及的类都没有被覆盖工具检测,因此没有跟踪执行,或者工具没有给你带来好的结果。

第一个问题可以通过确保正确检测所有类来解决。第二个问题可以通过放弃覆盖工具并获得更好的解决方案来解决。

忽视课程是一种虚假的经济。这就像声称你已经完成吸尘房子,因为你排除了本周没有使用的房间。你还没完成,那些房间仍然需要真空。

答案 1 :(得分:0)

The rule in TDD is "Test everything that could possibly break" Can a getter break? Generally not, so I don't bother to test it. Besides, the code I do test will certainly call the getter so it will be tested.

Junit test for POJO - >此链接描述了是否要测试POJO!

基本规则,在代码库中测试的所有内容。但是POJO和自动生成的代码库会有例外。

在这种情况下,这取决于接受报告的团队。使用Exclude from Sonar链接,我们可以排除模块。

1. I presume it won't be accounted for as a covered line for Data component? 

取决于对报告进行核算的团队。有没有开放的库来检查这些。 Pojo testing library

2. The Entity framework data component has virtually no business logic...

没有业务逻辑的单元测试没有意义。在这种情况下,请使用这些方法跳过声纳。

PS:由于没有提及您使用的语言,因此将其作为Java - sonar - maven环境的通用。