如何模拟 StringBuilder class
How to mock the StringBuilder class
根据 this answer,我想知道如何模拟 StringBuilder class。他们嘲笑控制台的方式 class 非常棒:
您需要一个接口来定义您的依赖项:
public interface IConsoleService
{
string ReadLine();
void WriteLine(string message);
}
You create a default implementation for it:
public class ConsoleService : IConsoleService
{
public string ReadLine()
{
return Console.ReadLine();
}
public void WriteLine(string message)
{
Console.WriteLine(message);
}
}
模拟 StringBuilder.Append 方法的方法是什么?
到目前为止我得到的是:
public interface IStringBuilderService
{
string Append(string line);
StringBuilder s
}
public class StringBuilderService : IStringBuilderService
{
public string Append(string line)
{
return this.ToString() += line;
}
}
即使很少需要模拟 StringBuilder
,我假设您出于试用目的需要它..所以这是一种模拟它的可能方法。
您的默认实现 class 需要包装 StringBuilder
.
的实例
public interface IStringBuilderService
{
IStringBuilderService Append(string line); // mimic the StringBuilder Append signature
StringBuilder S { get; }
}
public class StringBuilderService : IStringBuilderService
{
private StringBuilder _actualStringBuilder;
public StringBuilder S
{
get { return _actualStringBuilder; }
}
public StringBuilderService() // you could also take in a parameter if you wish to initialize the variable
{
_actualStringBuilder = new StringBuilder();
}
public IStringBuilderService Append(string line)
{
_actualStringBuilder.Append(line);
return this;
}
public override string ToString()
{
return _actualStringBuilder.ToString();
}
}
我们需要将 StringBuilder
的实例包裹在具体 class 中的原因是因为 Console
是静态资源,因此无需实例变量即可访问。 StringBuilder
将是每个实例,因此我们需要一个封装它的变量。
一旦你有了这个界面,你就可以在任何需要StringBuilder
操作的地方使用这个界面。
对于您的测试,您可以使用此接口的模拟。
根据 this answer,我想知道如何模拟 StringBuilder class。他们嘲笑控制台的方式 class 非常棒:
您需要一个接口来定义您的依赖项:
public interface IConsoleService
{
string ReadLine();
void WriteLine(string message);
}
You create a default implementation for it:
public class ConsoleService : IConsoleService
{
public string ReadLine()
{
return Console.ReadLine();
}
public void WriteLine(string message)
{
Console.WriteLine(message);
}
}
模拟 StringBuilder.Append 方法的方法是什么?
到目前为止我得到的是:
public interface IStringBuilderService
{
string Append(string line);
StringBuilder s
}
public class StringBuilderService : IStringBuilderService
{
public string Append(string line)
{
return this.ToString() += line;
}
}
即使很少需要模拟 StringBuilder
,我假设您出于试用目的需要它..所以这是一种模拟它的可能方法。
您的默认实现 class 需要包装 StringBuilder
.
public interface IStringBuilderService
{
IStringBuilderService Append(string line); // mimic the StringBuilder Append signature
StringBuilder S { get; }
}
public class StringBuilderService : IStringBuilderService
{
private StringBuilder _actualStringBuilder;
public StringBuilder S
{
get { return _actualStringBuilder; }
}
public StringBuilderService() // you could also take in a parameter if you wish to initialize the variable
{
_actualStringBuilder = new StringBuilder();
}
public IStringBuilderService Append(string line)
{
_actualStringBuilder.Append(line);
return this;
}
public override string ToString()
{
return _actualStringBuilder.ToString();
}
}
我们需要将 StringBuilder
的实例包裹在具体 class 中的原因是因为 Console
是静态资源,因此无需实例变量即可访问。 StringBuilder
将是每个实例,因此我们需要一个封装它的变量。
一旦你有了这个界面,你就可以在任何需要StringBuilder
操作的地方使用这个界面。
对于您的测试,您可以使用此接口的模拟。