我是一名有用的助手,可以为您翻译文本。
我有一个 C# 方法,将使用不同的线程多次调用。因此,我想创建一个单元测试,以在几个线程上测试此方法,但我不确定是否做得正确。
这是我的单元测试,没有使用线程:
在我的TestSetup中,我监听我的事件:
当我运行这个单元测试时,输出中会有一次“FromLocalPointsThreaded is done”,但没有“Conversion is complete”。我漏掉了什么才能让它正常工作?或者我应该使用不同的方法?
更新:我们正在切换库,用于执行实际转换。旧库不是线程安全的,所以我们添加了锁。新库应该是线程安全的,所以我想删除锁。但我需要一个单元测试来证明我们使用新库的方法真的是线程安全的。
我有一个 C# 方法,将使用不同的线程多次调用。因此,我想创建一个单元测试,以在几个线程上测试此方法,但我不确定是否做得正确。
这是我的单元测试,没有使用线程:
[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() 是我想测试的实际方法。
我已创建了一个委托、一个事件和一个处理程序:
public delegate void ReprojectCompleteHandler(IEnumerable<Coordinate> projectedCoordinates);
public event ReprojectCompleteHandler ReprojectCompleteEvent;
private void ReprojectHandler(IEnumerable<Coordinate> projectedCoordinates)
{
Debug.WriteLine("Conversion is complete");
}
在我的TestSetup中,我监听我的事件:
[TestInitialize]
public void TestSetup()
{
this.ReprojectCompleteEvent += this.ReprojectHandler;
}
我的单元测试如下:
[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);
}
}
当我运行这个单元测试时,输出中会有一次“FromLocalPointsThreaded is done”,但没有“Conversion is complete”。我漏掉了什么才能让它正常工作?或者我应该使用不同的方法?
更新:我们正在切换库,用于执行实际转换。旧库不是线程安全的,所以我们添加了锁。新库应该是线程安全的,所以我想删除锁。但我需要一个单元测试来证明我们使用新库的方法真的是线程安全的。