我正在尝试测试rx.net代码,而我对此完全感到困惑。 website中的一个示例非常有帮助,但是我无法连接最后一部分。下面是示例代码:
class SomeClass
{
constructor(IScheduler scheduler)
{
var interval = Observable.Interval(TimeSpan.FromSeconds(1), scheduler)
.Take(5);
}
}
// So in my unit test project I'll inject a TestScheduler as below
public void Test_Some_Class()
{
var scheduler = new TestScheduler();
var instance = new SomeClass(scheduler);
...
}
我的问题在我的启动文件中,我应该使用IScheduler的哪种实现:
services.AddSingleton<IScheduler, ConcreteImpl>()
这个stackoverflow question很有帮助,但我仍然无法将所有内容拼凑起来:(
答案 0 :(得分:0)
您将使用AsyncConversions。 像这样的东西
services.AddSingleton<IScheduler, SchedulerDefaults.AsyncConversions>()
答案 1 :(得分:0)
出于某些有趣的原因,昨天我遇到了运行时错误,但现在一切正常。嗯!您可以使用:services.AddSingleton<IScheduler>(DefaultScheduler.Instance);
代表TimeBasedOperations
或遵循示例here
public interface ISchedulerDefaults
{
IScheduler AsyncConversions { get; }
IScheduler ConstantTimeOperations { get; }
IScheduler Iteration { get; }
IScheduler TailRecursion { get; }
IScheduler TimeBasedOperations { get; }
}
并引用services.AddSingleton<ISchedulerDefaults, SchedulerDefaults>();
对于单元测试,可以使用:
public sealed class TestSchedulerDefaults : ISchedulerDefaults
{
private readonly TestScheduler _timeBasedOperations = new TestScheduler();
private readonly TestScheduler _asyncConversions = new TestScheduler();
private readonly TestScheduler _constantTimeOperations = new TestScheduler();
private readonly TestScheduler _iteration = new TestScheduler();
private readonly TestScheduler _tailRecursion = new TestScheduler();
IScheduler ISchedulerDefaults.AsyncConversions => new TestScheduler();
IScheduler ISchedulerDefaults.ConstantTimeOperations => new TestScheduler();
IScheduler ISchedulerDefaults.Iteration => new TestScheduler();
IScheduler ISchedulerDefaults.TailRecursion => new TestScheduler();
IScheduler ISchedulerDefaults.TimeBasedOperations => _timeBasedOperations;
public IScheduler AsyncConversions => _asyncConversions;
public IScheduler ConstantTimeOperations => _constantTimeOperations;
public IScheduler Iteration => _iteration;
public IScheduler TailRecursion => _tailRecursion;
public TestScheduler TimeBasedOperations => _timeBasedOperations;
}