এটি করার একটি পরিষ্কার উপায় ভার্চুয়ালটাইম ইনজেকশন। এটি আপনাকে সময় নিয়ন্ত্রণ করতে দেয়। প্রথমে ভার্চুয়ালটাইম ইনস্টল করুন
Install-Package VirtualTime
এটি উদাহরণস্বরূপ, এমন সময় তৈরি করতে দেয় যা সমস্ত কলগুলিতে ডেটটাইম-এ 5 বার দ্রুত চলে moves এখন বা উত্কনউ
var DateTime = DateTime.Now.ToVirtualTime(5);
সময়কে ধীরে ধীরে চালিত করতে, যেমন 5 বার ধীর করুন
var DateTime = DateTime.Now.ToVirtualTime(0.5);
সময় স্থির করতে এখনও করতে
var DateTime = DateTime.Now.ToVirtualTime(0);
সময়ে পিছনে সরানো এখনও পরীক্ষা করা হয় না
এখানে একটি নমুনা পরীক্ষা দেওয়া হচ্ছে:
[TestMethod]
public void it_should_make_time_move_faster()
{
int speedOfTimePerMs = 1000;
int timeToPassMs = 3000;
int expectedElapsedVirtualTime = speedOfTimePerMs * timeToPassMs;
DateTime whenTimeStarts = DateTime.Now;
ITime time = whenTimeStarts.ToVirtualTime(speedOfTimePerMs);
Thread.Sleep(timeToPassMs);
DateTime expectedTime = DateTime.Now.AddMilliseconds(expectedElapsedVirtualTime - timeToPassMs);
DateTime virtualTime = time.Now;
Assert.IsTrue(TestHelper.AreEqualWithinMarginOfError(expectedTime, virtualTime, MarginOfErrorMs));
}
আপনি আরও পরীক্ষা এখানে পরীক্ষা করতে পারেন:
https://github.com/VirtualTime/VirtualTime/blob/master/VirtualTimeLib.Tests/when_virtual_time_is_used.cs
ডেটটাইম.নিউ. টু ভার্চুয়ালটাইম এক্সটেনশন আপনাকে আইটিটাইমের একটি উদাহরণ দেয় যা আপনি কোনও পদ্ধতি / শ্রেণিতে পাস করেন যা আইটিমে উপর নির্ভর করে। কিছু ডেটটাইম.নিউ. টু ভার্চুয়ালটাইম আপনার পছন্দের ডিআই কনটেইনারে সেটআপ রয়েছে
এখানে ক্লাস কনট্রাস্টার ইনজেকশনের আরও একটি উদাহরণ
public class AlarmClock
{
private ITime DateTime;
public AlarmClock(ITime dateTime, int numberOfHours)
{
DateTime = dateTime;
SetTime = DateTime.UtcNow.AddHours(numberOfHours);
Task.Run(() =>
{
while (!IsAlarmOn)
{
IsAlarmOn = (SetTime - DateTime.UtcNow).TotalMilliseconds < 0;
}
});
}
public DateTime SetTime { get; set; }
public bool IsAlarmOn { get; set; }
}
[TestMethod]
public void it_can_be_injected_as_a_dependency()
{
//virtual time has to be 1000*3.75 faster to get to an hour
//in 1000 ms real time
var dateTime = DateTime.Now.ToVirtualTime(1000 * 3.75);
var numberOfHoursBeforeAlarmSounds = 1;
var alarmClock = new AlarmClock(dateTime, numberOfHoursBeforeAlarmSounds);
Assert.IsFalse(alarmClock.IsAlarmOn);
System.Threading.Thread.Sleep(1000);
Assert.IsTrue(alarmClock.IsAlarmOn);
}