【发布时间】:2019-09-17 15:17:06
【问题描述】:
我正在为我的 discord 机器人(使用 XUnit)编写测试,我想知道是否可以用一个测试替换我的测试。如果是这样,我该怎么做?
到目前为止,我为我的 Unity 类(它是 Unity Container、DI 框架的包装器)编写了 4 个单元测试。这些测试按预期工作,但每次我向容器添加新类型时添加一个新测试似乎并不正确。我查看了类似问题的答案,但解决方案要么复杂,要么对我的案例没有用处。
我正在测试的 Unity 类中的方法:
public static T Resolve<T>()
{
return Container.Resolve<T>();
}
它从 Unity Container 中返回一个对应类型的实例。
测试:
[Fact]
public void ResolveIDataStorage_ShouldWork()
{
var storage1 = Unity.Resolve<IDataStorage>();
var storage2 = Unity.Resolve<IDataStorage>();
Assert.NotNull(storage1);
Assert.NotNull(storage2);
Assert.Same(storage1, storage2);
}
[Fact]
public void ResolveILogger_ShouldWork()
{
var logger1 = Unity.Resolve<ILogger>();
var logger2 = Unity.Resolve<ILogger>();
Assert.NotNull(logger1);
Assert.NotNull(logger2);
Assert.Same(logger1, logger2);
}
[Fact]
public void ResolveDiscordSocketClient_ShouldWork()
{
var client1 = Unity.Resolve<DiscordSocketClient>();
var client2 = Unity.Resolve<DiscordSocketClient>();
Assert.NotNull(client1);
Assert.NotNull(client2);
Assert.Same(client1, client2);
}
[Fact]
public void ResolveConnection_ShouldWork()
{
var con1 = Unity.Resolve<Connection>();
var con2 = Unity.Resolve<Connection>();
Assert.NotNull(con1);
Assert.NotNull(con2);
Assert.Same(con1, con2);
}
在每个测试中,我解析一些类型并断言两个对象不为空并且它们应该是同一个实例。基本上,这些断言应该适用于任何类型(或一组特定类型,可能是 [Theory] 测试的参数),因此,为避免复制粘贴,进行一次测试会非常方便。
【问题讨论】:
-
您可以使用反射对所需成员进行泛型并调用它。从那里断言预期的行为。
-
也许像this这样的参数化测试?
标签: c# unit-testing moq unity-container xunit