gpt4 book ai didi

c# - 从另一个方法内部调用的方法的单元测试返回值

转载 作者:太空狗 更新时间:2023-10-30 00:44:00 24 4
gpt4 key购买 nike

我有一个类似的方法:

public List<MyClass> DoSomething(string Name, string Address, string Email, ref string ErrorMessage)
{
//Check for empty string parameters etc now go and get some data
List<MyClass> Data = GetData(Name, Address, Email);

/*************************************************************
//How do I unit test that the data variable might be empty???
*************************************************************/

List<MyClass> FormattedData = FormatData(Data);
return FormattedData;
}

我正在学习 TDD/单元测试。我的问题是,如何编写测试以确保如果 GetData 返回一个空列表,我将 ErrorMessage 设置为某个值,然后返回一个空列表?

最佳答案

在开发时,您应该像这样为测试留下一个“入口点”:

public List<MyClass> DoSomething(string Name, string Address,
string Email, ref string ErrorMessage, IDataProvider provider)
{
//Check for empty string parameters etc now go and get some data
List<MyClass> Data = provider.GetData(Name, Address, Email);

List<MyClass> FormattedData = FormatData(Data);
return FormattedData;
}

并且在单元测试中你应该mock IDataProvider

这称为依赖注入(inject) (DI) 或控制反转 (IOC)

通用模拟库:

列表取自here

维基百科文章:

Dependency Injection
Inversion Of Control


NUnit伪代码:

[Test]
public void When_user_forgot_password_should_save_user()
{
// Arrange
var errorMessage = string.Empty;
var dataProvider = MockRepository.GenerateStub<IDataProvider>();
dataProvider.Stub(x => x.GetData("x", "y", "z", ref errorMessage )).Return(null);

// Act
var result DoSomething("x","y","z", ref errorMessage, dataProvider);

// Assert

//...
}

关于c# - 从另一个方法内部调用的方法的单元测试返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9017194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com