gpt4 book ai didi

multithreading - MbUnit Icarus 在此测试中自毁

转载 作者:行者123 更新时间:2023-12-04 16:01:46 26 4
gpt4 key购买 nike

我正在尝试使用 MbUnit 测试多线程 IO 类。我的目标是让测试装置构造函数执行 3 次,对类中的每一行执行一次。然后,对于每个实例,在并行线程上多次执行测试。

但是,Icarus 在 TaskRunner 上因“索引超出范围”而崩溃。我无法获得完整堆栈,它生成消息框的速度太快。

我做错了什么,或者这是 MbUnit/Gallio 中的错误?

using System;
using System.Collections.Generic;
using System.Text;
using Gallio.Framework;
using MbUnit.Framework;
using MbUnit.Framework.ContractVerifiers;
using System.IO;

namespace ImageResizer.Plugins.DiskCache.Tests {
[TestFixture]
[Row(0,50,false)]
[Row(0,50,true)]
[Row(8000,100,true)]
public class CustomDiskCacheTest {

public CustomDiskCacheTest(int subfolders, int totalFiles, bool hashModifiedDate) {
char c = System.IO.Path.DirectorySeparatorChar;
string folder = System.IO.Path.GetTempPath().TrimEnd(c) + c + System.IO.Path.GetRandomFileName();
cache = new CustomDiskCache(folder,subfolders,hashModifiedDate);
this.quantity = totalFiles;

for (int i = 0; i < quantity;i++){
cache.GetCachedFile(i.ToString(),"test",delegate(Stream s){
s.WriteByte(32); //Just one space
},defaultDate, 10);
}
}
int quantity;
CustomDiskCache cache = null;
DateTime defaultDate = new DateTime(2011, 1, 1);

[ThreadedRepeat(150)]
[Test(Order=1)]
public void TestAccess() {
CacheResult r =
cache.GetCachedFile(new Random().Next(0, quantity).ToString(), "test",
delegate(Stream s) { Assert.Fail("No files have been modified, this should not execute"); }, defaultDate, 100);

Assert.IsTrue(System.IO.File.Exists(r.PhysicalPath));
Assert.IsTrue(r.Result == CacheQueryResult.Hit);
}

volatile int seed = 0;
[Test (Order=2)]
[ThreadedRepeat(20)]
public void TestUpdate() {
//try to get a unique date time value
DateTime newTime = DateTime.UtcNow.AddDays(seed++);
CacheResult r =
cache.GetCachedFile(new Random().Next(0, quantity).ToString(), "test",
delegate(Stream s) {
s.WriteByte(32); //Just one space
}, newTime, 100);

Assert.AreEqual<DateTime>(newTime, System.IO.File.GetLastWriteTimeUtc(r.PhysicalPath));
Assert.IsTrue(r.Result == CacheQueryResult.Miss);
}


[Test(Order=3)]
public void TestClear() {
System.IO.Directory.Delete(cache.PhysicalCachePath, true);
}
}
}

最佳答案

我不会直接回答有关错误的问题,但我认为以下步骤将有助于找到错误,而不会迷失在弹出的消息框中

  • 减少总文件数,
    子文件夹的值要低得多
    查看错误是否仍然存在 2 甚至 1
    文件数
  • 你的测试代码不是
    super 简单,应该如此,
    为测试编写测试
    所以你知道他们在跑
    正确,也许是那些随机的下一个
    是问题,也许是什么
    否则,测试应该很容易。
  • 找出什么测试破坏了
    系统,您的代码包含 3 个测试,
    和构造函数,评论另外两个
    测试并查看哪个产生
    错误
  • 你的线程重复 150
    看起来很恶心,也许尝试更小的
    如果错误是基本的,则为 2 或 3 之类的数字
    甚至 2 个线程可能会中断,如果你
    运行 150 个线程我能理解
    您的消息框问题
  • 添加日志记录并尝试 catch - catch
    该索引异常并记录您的
    类状态仔细,之后
    检查它我想你会看到
    问题更清楚了。

  • 现在你无法弄清楚我认为的问题,你有太多的变量,更不用说你没有为你的 Cache 类提供代码,这些代码可能包含一些导致它的简单错误,甚至在 MBunit 功能开始出现之前。

    关于multithreading - MbUnit Icarus 在此测试中自毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5628736/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com