2013-02-02 77 views
1

我有方法,看起來像這樣的參數:NUnit的如何測試傳遞給對象構造器

public A Method(int a, int b){ 
    return new A().AMethod(a, b); 
} 

現在,我通過測試對象,我得到了預期值後,一直運行測試它「A」和'b'爲AMethod,但對我來說,這看起來像一個集成測試,我正在測試第一個方法和內部的方法。我想知道如何在創建新對象A之後,如何測試我的Method分離以瞭解'a'和'b'是否傳遞給了AMethod,並且它們按照該順序傳遞,而不是顛倒過來。

+2

爲什麼您的實例方法返回新實例的實例方法的值? –

+0

A是DTO和a,b是下層的物品。 AM方法設置A和b的屬性值。 – Inm0r74L

+0

爲什麼它會實例化一個新的'A'?難道它只是調用'AMethod'? –

回答

0

我可以在這裏提出2個解決方案:

  1. 介紹A工廠的依賴。
    創建新的A實例的責任可以委託給第三方接口。例如。它可能是IAFactoryMethod()應該使用此工廠創建新的A實例,而不是直接創建A
    在這種情況下,您可以存根IAFactory:它應該返回A模擬。你可以用適當的參數測試AMethod

  2. 確認AMethod()執行的結果。
    例如:如果AMethod()初始化A實例的2個屬性(PropAPropB),則測試應檢查這些屬性是否包含有效值。
    在這種情況下,測試並沒有考慮實際初始化屬性的方式。它只是檢查最終結果是否符合預期。

1

您總是可以使用模擬框架來測試它。用MOQ框架創建模擬。比你可以測試參數。這將是這樣的

這不是確切的代碼,它有一些錯誤,但可以給你一個想法。

var mocmethod = new Mock<IMethodA>(pass your parameters here) 
mockmethod.setup=(x=>x.a(It.Isany<int>)......).Returns(A), 
mockmethod.Verify(r=>r.a(It.Is<int>(r=>r.b == "Something"), It.Is<int>(i=>i > 17))) 
相關問題