相关疑难解决方法(0)

如何对使用jUnit简单启动线程的方法进行单元测试?

在标题中,我想测试这样的方法:

public void startThread()
{
    new Thread()
    {
        public void run()
        {
            myLongProcess();
        }
    }.start();
}
Run Code Online (Sandbox Code Playgroud)

编辑:通过评论判断我认为测试线程是否启动并不常见.所以我要调整问题......如果我的要求是100%的代码覆盖率,我是否需要测试该线程是否启动?如果是这样,我真的需要一个外部框架吗?

java testing junit multithreading unit-testing

8
推荐指数
1
解决办法
9197
查看次数

在Java中测试线程安全性

可能重复:
我应该如何对线程代码进行单元测试?
测试多线程代码或确保代码是线程安全的准则

是否可以"单元测试"一个简单的类是否是线程安全的?

我的具体情况是一个简单的类,即子集向量:给定要保持的向量位置的"白名单"和输入向量,它产生一个输出向量,其中只有白名单中位置的值.我想写一个单元测试(如果可能的话)以确保如果我们将来重构这个类,我们保持它的线程安全.如果类不再是线程安全的,单元测试将失败.我意识到这有点模糊,并且在定义之下.

java multithreading thread-safety

8
推荐指数
2
解决办法
7556
查看次数

测试多线程代码或确保代码是线程安全的准则

是否有任何测试多线程代码的指导原则(除了在问题上抛出一堆线程并交叉手指).

我基本上正在寻找测试数据损坏,死锁和其他并发问题的好方法.基本上我希望能够通过测试证明代码是线程安全的.

Java中是否有任何框架可以让您轻松编写多线程场景的测试?

java testing concurrency multithreading unit-testing

6
推荐指数
1
解决办法
1993
查看次数

Python单元测试多线程

我是使用单元测试模块进行单元测试的新手,我需要测试一个使用线程模块的类。我并没有真正找到关于使用线程组合类的最佳方法的任何解决方案。我开始测试线程是否被调用(即活着),但后来我看到没有方法可以杀死线程。我需要一周的时间来确保线程中的代码在做它应该做的事情。我需要为此使用线程还是应该只测试函数本身?

谢谢你的帮助!

这是我的代码(有趣的部分):

class VideoLoader(Node):
   # some code

   def execute(self):
     self.thread1 = Thread(target = run_resizer, args = (self,))

def run_resizer(node):
    while True:
        while not len(node.frames_to_resize):
            time.sleep(0.001)      
        node.frames.append(resize({'height': 400, 'width': 500))
Run Code Online (Sandbox Code Playgroud)

python multithreading unit-testing

6
推荐指数
1
解决办法
3109
查看次数

jvm重新排序/能见度效应测试

在编写一些java文章时,我试图在多线程环境中的非同步对象构造的情况下重现重新排序.构建重型对象时没有同步/挥发性/韵母和其他线程在构造函数调用后立即访问它的情况.这是我尝试的代码:

public class ReorderingTest {
    static SomeObject<JPanel>[] sharedArray = new SomeObject[100];

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            String name = "watcher" + i;
            new Thread(new Watcher(name)).start();
            System.out.printf("watcher %s started!%n", name);
        }
    }

    static class Watcher implements Runnable {
        private String name;

        Watcher(String name) {
            this.name = name;
        }

        public void run() {
            while (true) {
                int randomIndex = (int) (Math.random() * sharedArray.length);
                SomeObject<JPanel> item = sharedArray[randomIndex];
                if (item …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading memory-visibility

5
推荐指数
1
解决办法
664
查看次数

适合非线程安全代码的执行器

我正在开发一些最终将使用线程池进行多线程的代码Executor。线程池执行的任务将进行回调并(有时)将进一步的任务提交到任务队列。我想首先开发单线程代码,使其正确(我正在使用测试驱动开发),然后才进行更改以确保线程安全(锁等)。为此,我需要一个Executor可以安全地与非线程安全代码一起使用的代码。

认为这意味着我需要一个Executor单线程的。也就是说,它导致所有工作都由调用线程完成。JRE 提供这样的吗Executor?或者是否可以将其中一个Executor配置为在该模式下运行?


我已经在使用Humble Object测试模式来测试我的大部分单线程代码。然而,我的一些代码必须与 anExecutor或可能与 an交互ExecutorService,因为它涉及任务的 调度和重新提交,并且它将以一种不平凡的方式进行。测试代码是这里的挑战。这些任务更新一个共享对象,该对象保存其结果和输入数据。我想推迟使该共享对象线程安全,直到我实现并调试了调度和重新提交代码。

java multithreading unit-testing executor

5
推荐指数
1
解决办法
825
查看次数

测试ruby中的线程代码

我正在delayed_job为DataMapper 编写一个克隆.除了工作进程中的线程之外,我已经得到了我认为正在工作和测试的代码.我查找delayed_job了如何测试这个,但现在有对该部分代码的测试.下面是我需要测试的代码.想法?(我正在使用rspec BTW)

def start
  say "*** Starting job worker #{@name}"
  t = Thread.new do
    loop do
      delay = Update.work_off(self) #this method well tested
      break if $exit
      sleep delay
      break if $exit
    end
    clear_locks
  end

  trap('TERM') { terminate_with t }
  trap('INT')  { terminate_with t }

  trap('USR1') do
    say "Wakeup Signal Caught"
    t.run
  end
Run Code Online (Sandbox Code Playgroud)

另见这个帖子

ruby multithreading unit-testing rspec

4
推荐指数
1
解决办法
2463
查看次数

如何对线程安全队列进行单元测试

我需要一个具有以下要求的简单数据结构:

  • 它应该像一个队列,
  • 所有入队操作都应该是原子的.

我对多线程的经验非常有限,但这就是我的目标:

public class Tickets
{
    private ConcurrentQueue<uint> _tickets;

    public Tickets(uint from, uint to)
    {
        Initialize(from, to);
    }

    private readonly object _lock = new object();
    public void Initialize(uint from, uint to)
    {
        lock(_lock)
        {
            _tickets = new ConcurrentQueue<uint>();

            for (uint i = from; i <= to; i++)
            {
                _tickets.Enqueue(i);
            }
        }
    }

    public uint Dequeue()
    {
        uint number;
        if (_tickets.TryDequeue(out number))
        {
            return number;
        }

        throw new ArgumentException("Ticket queue empty!");
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个问题:这段代码好吗?

Secod问题:我怎样才能对这个类进行单元测试(例如,两个线程在队列中定期执行出队操作,元素为(1,2,3,4,5,6),第一个线程只能得到奇数和第二个线程只有偶数)?我试过这个,但断言没有执行:

[Test]
public void Test() …
Run Code Online (Sandbox Code Playgroud)

.net c# queue multithreading unit-testing

4
推荐指数
2
解决办法
3897
查看次数

为自定义屏障设计测试类

我必须使用锁作为我课程工作的一部分来实现自定义障碍类.为了测试我的LockBarrier课程,我提出了以下测试代码.它工作正常,但我担心这是否是正确的方法.你能否提出我可以做的改进,特别是构建课程.我认为我的编码方式不正确.欢迎任何建议.

public class TestDriver 
{
        private static LockBarrier barrier;

        static class Runnable1 implements Runnable
        {
            public Runnable1()
            { }

            public void run()
            {
                try
                {
                    System.out.println(Thread.currentThread().getId()+" lazy arrived at barrier");
                    Thread.sleep(10000);
                    barrier.await();
                    System.out.println(Thread.currentThread().getId()+" passed barrier");           

                }
                catch (InterruptedException ie)
                {
                    System.out.println(ie);
                }
            }     

        }

        static class Runnable2 implements Runnable
        {       

            public Runnable2()
            { } 

            public void run()
            {
                try
                {
                    System.out.println(Thread.currentThread().getId()+" quick arrived at barrier");

                    //barrier.await(1,TimeUnit.SECONDS);
                    barrier.await();
                    System.out.println(Thread.currentThread().getId()+" passed barrier");
                }               
                catch (InterruptedException ie)
                {
                    System.out.println(ie);
                }
            } …
Run Code Online (Sandbox Code Playgroud)

java multithreading

2
推荐指数
1
解决办法
2531
查看次数

在单元测试中使用多少个线程?

我正在测试一个线程安全类.我从不同的线程调用它的方法,以确保它们都收到相同的结果(简而言之).这是我决定使用多少线程的方式:

int threads = Runtime.getRuntime().availableProcessors() * 4;
Run Code Online (Sandbox Code Playgroud)

这是一个好习惯吗?我应该使用多少?越多越好?

java multithreading unit-testing

2
推荐指数
1
解决办法
119
查看次数

为并发C#代码编写单元测试?

我一直试图解决这个问题很长一段时间了.我已经编写了一些示例代码,展示了lockC#中的用法.手动运行我的代码我可以看到它的工作方式应该如此,但当然我想写一个单元测试来确认我的代码.

我有以下ObjectStack.cs课程:

enum ExitCode
{
    Success = 0,
    Error = 1
}

public class ObjectStack
{
    private readonly Stack<Object> _objects = new Stack<object>();
    private readonly Object _lockObject = new Object();
    private const int NumOfPopIterations = 1000;

    public ObjectStack(IEnumerable<object> objects)
    {
        foreach (var anObject in objects) {
            Push(anObject);
        }
    }

    public void Push(object anObject)
    {
        _objects.Push(anObject);
    }

    public void Pop()
    {
        _objects.Pop();
    }

    public void ThreadSafeMultiPop()
    {
        for (var i = 0; i < NumOfPopIterations; i++) { …
Run Code Online (Sandbox Code Playgroud)

c# multithreading unit-testing thread-safety

2
推荐指数
1
解决办法
1826
查看次数

测试多线程调用SimpleDateFormat

我想测试一个修复,其中SimpleDateFormat用作静态类变量.我得到了

以前我的代码是

public class Abc{
   private static SimpleDateFormat dateformatter;

   public static String method1(final Calendar calendar) {
      String thePattern = "ddMMM";
      dateformatter = new SimpleDateFormat(thePattern, Locale.US);
      sPars = dateformatter.format(calendar.getTime());
      //Something

   }

   public static String method2(final Calendar calendar) {
      String thePattern = "ddMMyyyy";
      dateformatter = new SimpleDateFormat(thePattern, Locale.US);
      sPars = dateformatter.format(calendar.getTime());
      //Something

   }
}
Run Code Online (Sandbox Code Playgroud)

对于这个,我得到了以下异常

java.lang.ArrayIndexOutOfBoundsException: 965
            at sun.util.calendar.BaseCalendar.getCalendarDateFromFixedDate(BaseCalendar.java:454)
            at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2333)
            at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2248)
            at java.util.Calendar.setTimeInMillis(Calendar.java:1140)
            at java.util.Calendar.setTime(Calendar.java:1106)
            at java.text.SimpleDateFormat.format(SimpleDateFormat.java:955)
            at java.text.SimpleDateFormat.format(SimpleDateFormat.java:948)
            at java.text.DateFormat.format(DateFormat.java:336)
Run Code Online (Sandbox Code Playgroud)

现在我已将其更改为:

public class Abc{  
   public static String method1(final Calendar …
Run Code Online (Sandbox Code Playgroud)

java multithreading simpledateformat

0
推荐指数
1
解决办法
1433
查看次数

运行单元测试时如何自动禁用Spring bean?

我有一个启动线程并运行一些后台任务的服务类。在运行单元测试时,不应运行这些任务。服务类本身非常简单,因此不需要进行单元测试。它就像是:

@Service
public class BackgroundTaskService {
    @PostConstruct
    public void startTask() {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

当前,我正在设置系统属性以声明正在运行单元测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SomeTest {
    static {
        System.setProperty("unit_testing", "true");
    }
    @Test
    public void test() {}
}
Run Code Online (Sandbox Code Playgroud)

然后,我可以检查:

@PostConstruct
public void startTask() {
    if (System.getProperty("unit_testing") != null) {
        return;  // skip background tasks
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法可以做到这一点。

java spring unit-testing

0
推荐指数
1
解决办法
1135
查看次数