簡體   English   中英

我對該方法進行單元測試有哪些選擇?

[英]What Are My Options For Unit-Testing This Method?

我的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
  });
});

Ray.o是射線的起源。 Ray.d是射線的方向。 我希望Ray.moveAlong(t)返回一個點q,使得q = o + d * t。

我對單元測試的理解是,如果我將Vector3f模塊實際包含在單元測試中,以便為Ray提供起點和方向,那么我實際上是在進行集成測試。 但是我將需要從Vector3f模塊中獲取add()和mulScalar()方法,以便在moveAlong(t)中計算ray.d + ray.d * t。

在這里處理我的Vector3f依賴項有哪些選擇? 我沒有看到如何合理地對其進行存根,但是對存根進行存根並一次僅測試一種方法是單元測試的重點。

單元測試選項:

第一種選擇:
只需將Vector3f對象傳遞給Ray.o,Ray.d

優點:
- 簡單。

缺點:
-保留測試中的依賴性。
-對不在此測試中的組件(Vector3f)進行更新可能需要對該測試進行更新。

第二種選擇:
創建存根Vector3fs,每個存根僅實現Vector3f模塊的add(Vector3f v),mulScalar(Number t)方法。 這在Javascript中非常容易,因為引用是無類型的,並且具有正確方法的任何對象都可以替代“正確”對象。 這使我認為嘗試將OOP引入該項目是一個壞主意,但是我不確定如何解決這個問題,這是另一個問題。

優點:
-打破了測試代碼中Ray和Vector3f之間的依賴關系,因此,對Vector3f的進一步更改將不會導致Ray單元測試失敗,如果某些東西破壞了Vector3f,則可以減少要檢查的失敗測試的數量。

缺點:
-測試中有更多代碼。
-如果更改Vector3f的方式使其可以通過其所有單元測試,但破壞了Ray的功能,則我們也不會在Ray單元測試中看到它,因為對Vector3f的依賴性已被破壞。

我不確定最后一個缺點是否是一個問題-如果Vector3f通過所有的單元測試,那么它正在遵守與系統其他組件的合同,因此我們永遠都不會看到Vector3f的測試全部通過的情況,但它會導致其他組件損壞。 此外,這是集成級別的問題,而不是單元級別的問題。

我認為第二種選擇是要走的路。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM