В последнее время я изучаю юнит-тест и пытаюсь использовать этот навык в своем проекте.Однако у меня есть вопрос о том, как протестировать следующий код.
public class Class1
{
private Timer _timer = new Timer();
public Class1()
{
_timer.Interval = 1000;
_timer.Elapsed += _timer_Elapsed;
}
private void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
//some works
}
public void start()
{
_timer.Start();
//some works
}
public void stop()
{
_timer.Stop();
//some works
}
}
Я действительно не знаю, как протестировать этот класс, не нарушая его инкапсуляцию.
Должен ли я выставить метод _timer_Elapsed?Эван, если сделаешь это, следующий вопрос касается того, как проверить метод 'start' и 'stop'.Должен ли я использовать объект-заглушку для замены таймера для тестирования этого класса?если это, этот класс будет слишком сложным, потому что мне нужно создать интерфейс и создать класс, который инкапсулирует Timer и реализует интерфейс выше.
public interface IEncal
{
double Interval { get; set; }
event ElapsedEventHandler Elapsed;
void Stop();
void Start();
}
public class MyClass : IEncal
{
Timer timer = new Timer();
public double Interval { get { return timer.Interval; } set { timer.Interval = value; } }
public event ElapsedEventHandler Elapsed
{
add { timer.Elapsed += value; }
remove { timer.Elapsed -= value; }
}
public void Start()
{
timer.Start();
}
public void Stop()
{
timer.Stop();
}
}
public class Class1
{
private IEncal _timer;
public Class1(IEncal timer)
{
_timer = timer;
_timer.Interval = 1000;
_timer.Elapsed += _timer_Elapsed;
}
public void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
//some works
}
public void start()
{
_timer.Start();
//some works
}
public void stop()
{
_timer.Stop();
//some works
}
}
Есть ли лучший способ протестировать этот класс?
Ниже приведен реальный код, который я использую.Я написал модульный тест для класса ISender и класса IInfoProducer.Поскольку я впервые использую модульный тест, я хотел бы подумать о каждом классе для обучения.
Возвращаясь к вопросу, этот класс в основном является классом Timer.По истечении этого времени он отправляет информацию.Итак, как я должен проверить этот процесс отправки времени?
public class InfomationSender
{
private readonly Timer _timer = new Timer();
private readonly ISender _sender;
private readonly IInfoProducer _producer;
public InfomationSender(ISender sender, IInfoProducer producer)
{
_sender = sender;
_producer = producer;
_timer.Interval = 1000;
_timer.Elapsed += _timer_Elapsed;
}
private void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
var info = _producer.getInfo();
_sender.send(info);
}
public void start()
{
_timer.Start();
}
public void stop()
{
_timer.Stop();
_sender.Dispose();
}
}