I have a C# method that will be called multiple times using different threads. So I want to create a unit test that will test this method on several threads, but I'm not sure I'm doing it right.
This is my unit test without threading:
[TestMethod]
public void FromLocalPoints()
{
var projectedCoordinates = this.ConvertFromLocalPoints();
foreach (var projectedCoordinate in projectedCoordinates)
{
Debug.Write(projectedCoordinate.X);
Debug.Write("; ");
Debug.WriteLine(projectedCoordinate.Y);
}
}
this.ConvertFromLocalPoints() is calling the actual method I want to test.
I've created a delegate, an event and an handler:
public delegate void ReprojectCompleteHandler(IEnumerable<Coordinate> projectedCoordinates);
public event ReprojectCompleteHandler ReprojectCompleteEvent;
private void ReprojectHandler(IEnumerable<Coordinate> projectedCoordinates)
{
Debug.WriteLine("Conversion is complete");
}
In my TestSetup I listen to my event:
[TestInitialize]
public void TestSetup()
{
this.ReprojectCompleteEvent += this.ReprojectHandler;
}
My unit test is:
[TestMethod]
public void FromLocalPointsThreaded()
{
// Call FromLocalPoints multiple times in separate threads to check if it is thread safe
for (var i = 0; i < 10; i++)
{
var myThread = new Thread(this.ConvertFromLocalPointsThreaded);
}
Debug.WriteLine("FromLocalPointsThreaded is done");
}
private void ConvertFromLocalPointsThreaded()
{
var projectedCoordinates = this.ConvertFromLocalPoints();
// Send result to delegate/event:
if (this.ReprojectCompleteEvent != null)
{
this.ReprojectCompleteEvent(projectedCoordinates);
}
}
When I run this unit test I get once 'FromLocalPointsThreaded is done' in my output but no 'Conversion is complete'.
What am I missing to get this working? Or should I use a different approach?
Aucun commentaire:
Enregistrer un commentaire