我很乐意删除这个问题,如果提供重复的话。在这方面缺乏知识使得寻找解决方案变得更加困难。
我们开始实施单位&整个组织的集成测试;从新项目开始。
我们完全拥有的测试代码看起来很简单,我们可以利用很多资源。
另一方面,测试调用第三方服务的代码要困难一些。我知道模拟是我们应该做的事情,尽管有点难以弄清楚特定代码片段的实际实现。
在这种特殊情况下,我们有一个新的库,它将位于业务层和业务层之间。第三方异常记录器(Sentry) - 因此它是一个传统的包装器。
举个例子,下面的代码是精简的摘录。
接口
public interface IExceptionLogging
{
void Capture(string endpointKey, string message, params KeyValuePair<string, string>[] tag);
void Capture(string endpointKey, Exception exception, params KeyValuePair<string, string>[] tag);
}
摘要,有助于强制执行构造函数
public abstract class ExceptionLogging : IExceptionLogging
{
internal Dictionary<string, Uri> LoggerEndpoints;
protected ExceptionLogging(Dictionary<string, Uri> loggerEndpoints)
{
LoggerEndpoints = loggerEndpoints;
}
public abstract void Capture(string endpointKey, string message, params KeyValuePair<string, string>[] tag);
public abstract void Capture(string endpointKey, Exception exception, params KeyValuePair<string, string>[] tag);
}
实施
public class GetSentry : ExceptionLogging
{
private Dictionary<string, RavenClient> _clients = new Dictionary<string, RavenClient>();
public GetSentry(Dictionary<string, Uri> loggerEndpoints)
: base(loggerEndpoints)
{
LoggerEndpoints.ToList().ForEach(ep =>
{
_clients.Add(ep.Key, new RavenClient(ep.Value.ToString()));
});
}
public override void Capture(string endpointKey, Exception ex, params KeyValuePair<string, string>[] tag)
{
RavenClient client = _clients[endpointKey];
if (client != null)
{
SentryEvent se = new SentryEvent(ex);
tag.ToList().ForEach(t => se.Tags.Add(t));
client.Capture(se);
}
}
public override void Capture(string endpointKey, string message, params KeyValuePair<string, string>[] tag)
{
RavenClient client = _clients[endpointKey];
if (client != null)
{
SentryEvent se = new SentryEvent(message);
tag.ToList().ForEach(t => se.Tags.Add(t));
client.Capture(se);
}
}
测试这样的东西的方法是什么?
如上所述,如果有有效的副本,我将很乐意删除此Q.我不确定从哪里开始。