Description
Consider a class such as the following. It has a BackgroundWorker
as a property, and a method that lets it report progress:
public class MyClass
{
protected BackgroundWorker _worker;
public MyClass(BackgroundWorker worker)
{
_worker = worker;
}
public void ReportProgress(int percentage)
{
_worker.ReportProgress(percentage);
}
}
Questions
Should ReportProgress()
be tested?
If the answer to the above is, "yes"? How to go about it? The following test has been tried, using FakeItEasy:
[Test]
public void ReportProgress_Test()
{
// arrange
var fakeWorker = A.Fake<System.ComponentModel.BackgroundWorker>();
fakeWorker.WorkerReportsProgress = true;
MyClass underTest = new MyClass(fakeWorker);
// act
underTest.ReportProgress(percentage);
// assert
A.CallTo(() => fakeWorker.ReportProgress(percentage)).MustHaveHappened();
}
This test yields the following error:
Message: FakeItEasy.Configuration.FakeConfigurationException :
The current proxy generator can not intercept the method System.ComponentModel.BackgroundWorker.ReportProgress(System.Int32 percentProgress) for the following reason:
- Non-virtual members can not be intercepted. Only interface members and virtual, overriding, and abstract members can be intercepted.