我的单元测试选项是什么
What Are My Options For Unit-Testing This Method?
My Ray模块:
define(['Util', 'Vector3f'], function (Util, Vector3f) {
var Ray = {}
Ray.o = null;
Ray.d = null;
Ray.depth = 0;
Ray.mint = 0.03;
Ray.maxt = null;
return Ray;
});
我的单元测试:
describe(".moveAlong(Number t)", function(){
it("returns a point at distance t in the direction of the ray",
function(){
expect(4).toBe(null); //unimplemented unit test always fails
});
});
o是射线的原点。射线.d是射线的方向。我希望Ray.moveAlong(t)返回一个点q,使得q=o+d*t。
我对单元测试的理解是,如果我真的在单元测试中包括Vector3f模块,这样我就可以给Ray一个原点和方向,我实际上在做什么集成测试。但是我需要Vector3f模块中的add()和mulScalar()方法来计算moveAlong(t)中的ray.d+ray.d*t。
在这里处理Vector3f依赖关系的选项是什么?我不知道如何合理地截断它,但截断依赖关系并一次只测试一个方法是单元测试的重点。
单元测试选项:
第一个选项:
只需为Ray.o、Ray.d 传入Vector3f对象
优点:
-简单。
缺点:
-保留测试中的依赖关系
-更新未在此测试下的组件(Vector3f)可能需要更新此测试。
第二种选择:
创建存根Vector3fs,每个仅实现Vector3f模块的add(Vector3f-v)、mulScalar(Number t)方法。这在Javascript中非常容易,因为引用是无类型的,任何具有正确方法的对象都可以代替"正确"对象。这让我觉得,试图将horn OOP引入这个项目是个坏主意,但我真的不知道该如何处理,这是另一个问题的主题。
优点:
-在测试代码中打破Ray和Vector3f之间的依赖关系,这样对Vector3f的进一步更改就不会导致Ray在单元测试中失败,从而减少了在某些东西破坏Vector3夫时要检查的失败测试的数量。
缺点:
-测试中的更多代码
-如果Vector3f的更改方式允许它通过所有单元测试,但破坏了Ray的功能,那么我们也不会在Ray单元测试中看到它,因为对Vector3f的依赖性已经被破坏。
我不确定最后一个问题是什么——如果Vector3f通过了所有的单元测试,那么它就遵守了与系统其他组件的合同,所以我们永远不应该看到Vector3f的测试都通过了,但却导致其他组件中断的情况。此外,这是一个集成级别的问题,而不是单元级别的问题。
我认为第二种选择是要走的路。
- 我的单元测试选项是什么
- 我的客户端选项是什么
- 将选项添加到插件msDropdown生成的下拉列表的最佳方式是什么
- 在 React-Leaflet 库中为
- 我们可以在 jquery ui 选项卡中用于隐藏/显示的不同效果是什么
- 将更多数据与选择选项相关联的正确方法是什么,而不仅仅是“值”
- 在 Ember .js 中通过 ajax 加载选择选项的最佳实践是什么?
- 当给定一个数组(仅限纯Javascript)时,删除选择(多个)选项的最简单方法是什么
- IE中“启用本机XMLHTTP支持”选项的目的是什么?
- 如何使选项始终显示,无论输入值是什么
- ng选项在点击时清除模型(和可见选项),在tarnation中是什么
- 从js数组中获取select选项和值的最佳方式是什么
- 在asp.net-mvc网站中,存储列表客户端以切换下拉选择选项的最佳方式是什么
- 多行HTML选项标签的变通方法是什么?
- 在firefox中,在选项卡重定向之前获取URL的方法是什么
- 离开IE选项卡的事件是什么?
- 从Go应用程序中刷新特定浏览器选项卡的最简单方法是什么?
- 模型选项的目的是什么?
- jQuery插件选项排序/嵌套的最佳实践是什么?
- 从文本区域获得反馈的选项是什么?