C# 单元测试依赖于多种方法的方法

C# 单元测试依赖于多种方法的方法,c#,unit-testing,c#-4.0,moq,C#,Unit Testing,C# 4.0,Moq,我有一个MethodA,它在一个单独的类中调用MethodB(接口后面的类) MethodB中有一个StreamReader,因此我将对newstreamreader()的调用重构为一个新的MethodC(与MethodB在同一个类中) 为了测试MethodA,我需要模拟MethodB,但我还需要能够通过模拟MethodC来测试MethodB (我想很明显我有点迷路了。) 名称空间JimBob.CsvImporter.Entity { 公共接口管理器 { TextReader ReturnRea

我有一个
MethodA
,它在一个单独的类中调用
MethodB
(接口后面的类)

MethodB
中有一个
StreamReader
,因此我将对
newstreamreader()
的调用重构为一个新的
MethodC
(与
MethodB
在同一个类中)

为了测试
MethodA
,我需要模拟
MethodB
,但我还需要能够通过模拟
MethodC
来测试
MethodB

(我想很明显我有点迷路了。)

名称空间JimBob.CsvImporter.Entity
{
公共接口管理器
{
TextReader ReturnReader(字符串路径);
int GetNumberOfColumnsInFile(字符串文件路径,列表错误消息列表);
}
公共类IOManager:IIOManager
{
//方法C
公共文本读取器ReturnReader(字符串文件路径)
{
返回新的StreamReader(文件路径);
}
//方法B
public int GetNumberOfColumnsInFile(字符串文件路径,列表错误消息列表)
{
int numberOfColumns=0;
字符串lineElements=null;
尝试
{
使用(StreamReader columnReader=(StreamReader)ReturnReader(filePath))
{
lineElements=columnReader.ReadLine();
string[]columns=lineElements.Split(',');
numberOfColumns=columns.Length;
}
返回numberOfColumns;
}
捕获(例外情况除外)
{
errorMessageList.Add(例如消息);
返回-1;
}
}
}
公共类实体验证
{
私人管理人(iomgr);
公共实体验证(IIOManager ioManager)
{
这个。_iomgr=ioManager;
}
//方法
柱体的公共无效性(
字符串文件路径,int userSpecifiedColumnCount,
列表错误消息列表
)
{
int numberOfColumnsInFile=
_iomgr.GetNumberOfColumnsInFile(文件路径,errorMessageList);
如果(userSpecifiedColumnCount!=numberOfColumnsInFile)errorMessageList.Add(
“指定的列数与文件中存在的列数不匹配。”);
}
目前我的测试如下:

    [Test]
    public void GetNumberOfColumnsInFile_ReturnsNumberOfColumns_Returns6()
    {
        Mock<IIOManager> mock = new Mock<IIOManager>();
        mock.Setup(x => x.ReturnReader(It.IsAny<string>())).Returns(
           new StringReader("the,big,fat,dog,ate,cats"));
        EntityVerification testObject = new EntityVerification(mock.Object);
        List<String> errorMessageList = new List<string>();
        int i = testObject.GetNumberOfColumnsInFile("blabla.txt", errorMessageList);
        Assert.AreEqual(i , 6);
    }
[测试]
public void GetNumberOfColumnsInFile\u ReturnsNumberOfColumns\u Returns6()
{
Mock Mock=新Mock();
mock.Setup(x=>x.ReturnReader(It.IsAny()).Returns(
新的StringReader(“the,big,fat,dog,ate,cat”);
EntityVerificationTestObject=新的EntityVerification(mock.Object);
List errorMessageList=新建列表();
int i=testObject.GetNumberOfColumnsInFile(“blabla.txt”,errorMessageList);
主张平等(i,6);
}
但这是为了当它是实体验证类的一部分时


我遗漏了什么吗?如果有任何帮助,我们将不胜感激!

在测试
MethodA
,Mock
MethodB
。在单独的测试中,Mock
MethodC
测试
MethodB


MethodA
的测试独立于
MethodB
的测试,所以不要想太多。

MethodA
的测试中,Mock
MethodB
。在单独的测试中,Mock
MethodC
来测试
MethodB

MethodA
的测试独立于
MethodB
的测试,所以不要想得太多

    [Test]
    public void GetNumberOfColumnsInFile_ReturnsNumberOfColumns_Returns6()
    {
        Mock<IIOManager> mock = new Mock<IIOManager>();
        mock.Setup(x => x.ReturnReader(It.IsAny<string>())).Returns(
           new StringReader("the,big,fat,dog,ate,cats"));
        EntityVerification testObject = new EntityVerification(mock.Object);
        List<String> errorMessageList = new List<string>();
        int i = testObject.GetNumberOfColumnsInFile("blabla.txt", errorMessageList);
        Assert.AreEqual(i , 6);
    }