如何单元测试构造字符串的方法?

时间:2017-08-28 21:02:48

标签: c# unit-testing testing

我有一个从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;
    }

}

2 个答案:

答案 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);
}