![](/img/trans.png)
[英]AutoFixture.AutoMoq supply a known value for one constructor parameter
[英]AutoFixture: Supply a Func as a constructor argument
我對單元測試很新,並且正在使用xUnit和AutoFixture進行一些實驗。
這是我要測試的類的構造函數:
public PokerClientIniGenerateCommand(
Func<TextWriter> writerCreator,
FranchiseInfo franchise)
{
// some code here
}
我這樣做:
public abstract class behaves_like_poker_client_ini_generate_command : Specification
{
protected PokerClientIniGenerateCommand commandFixture;
protected behaves_like_poker_client_ini_generate_command()
{
var fixture = new Fixture();
commandFixture = fixture.Create<PokerClientIniGenerateCommand>();
}
}
我不知道如何設置構造函數參數(主要是第一個參數--func部分)。
在我的業務邏輯中,我像這樣實例化這個類:
new PokerClientIniGenerateCommand(
() => new StreamWriter(PokerClientIniWriter),
franchise));
所以在我的測試中我應該像這樣調用func:
() => new StringWriter(PokerClientIniWriter)
但是如何通過AutoFixture設置它。 任何幫助將舉例如將非常感謝。
正如@NikosBaxevanis在他的回答中正確指出的那樣,AutoFixture能夠創建任何委托類型的匿名實例 。 這些匿名委托采用動態生成的方法的形式。
正如目前所實施的那樣,生成策略遵循以下規則:
void
,則創建的方法將為no-op 。 T
,則創建的方法將返回T
的匿名實例。 根據這些規則,在Func<TextWriter>
的情況下,僅使用以下內容自定義匿名TextWriter
對象的創建就足夠了:
fixture.Register<TextWriter>(() => new StringWriter());
我成功地做到了這一點:
fixture.Register<Func<TextWriter>>(() => () => new StringWriter());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.