我有一个从List
构造字符串的方法。我想用单元测试来测试方法。什么是测试该方法的好方法?
我需要使用数据库来获取matchList。我不知道如何使用模拟对象来做到这一点。
public class File_IO
{
private string _rootDirectory;
private string _taskName;
private File_IO()
{
}
public File_IO(string rootDirectory, string taskName)
{
_rootDirectory = rootDirectory;
_taskName = taskName;
}
public string RootDir
{
get { return _rootDirectory; }
}
public string TaskName
{
get { return _taskName; }
}
public string constructString()
{
string result = string.Empty;
string pipe = "|";
StringBuilder stringBuilder = new StringBuilder();
bool isFirst = true;
IList matchList = new List<string> { "*.Ext","*.ext" };
// Iterate over the results and construct the string.
foreach (var item in matchList)
{
if (!isFirst)
{
stringBuilder.Append(pipe);
}
isFirst = false;
stringBuilder.Append(item);
}
result = stringBuilder.ToString();
return result;
}
}
答案 0 :(得分:0)
Nunit是一个非常受欢迎的框架,用于在C#中进行单元测试。 http://nunit.org/
使用nuget安装它并创建测试用例。 看起来或多或少会像这样:
[Test]
public static void TestFile_IO()
{
var expectedString = "what ever is supposed to come out of the method";
var result = new File_IO.constructString();
Assert.AreEqual(expectedString, result)
}
答案 1 :(得分:0)
我不确定我是否正确理解了问题...... 可能你需要这样的东西:
interface IRepository
{
List<string> GetList();
}
class Repository
{
List<string> GetList() { return /*Query database here*/ ;}
}
public class File_IO
{
private IRepository _repository;
private File_IO(IRepository repository)
{
_repository = repository;
}
public string constructString()
{
IList matchList = _repository.GetList();
.........................
return result;
}
}
在这种情况下,您将能够使用模拟框架之一(Moq,NSubstitute)对此进行测试。以下示例使用NSubstitute。
public void TestMethod()
{
var repositoryMock = Substitute.For<IRepository>();
repositoryMock.GetList().Returns(new List<string> {"str1", "str2"});
var f_io = new File_IO(repositoryMock);
var result = f_io.constructString();
Assert.AreEqual("Expected string", result);
}