0

我已经开始为我们的测试块和助手开发一些规范/示例测试,我希望能够跨多个测试人员运行。不过,我没有看到任何用于在测试期间设置测试仪的明确 API。我在OrigenTesters规范中看到我们可以执行以下操作:

Origen.environment.temporary = 'j750.rb'
Origen.load_target('default')

这工作正常,并没有那么糟糕,但是否有某种语法,如:

Origen.with_tester('j750.rb')
  # do whatever with this tester
end

要不就

Origen.switch_tester('j750.rb')

Origen.tester = OrigenTesters::J750.new

# or something to these effects

谢谢

4

1 回答 1

1

更改目标是更改 DUT 和 Tester 实例的机制,因此从根本上说,在您的第一个示例中完成的方式是正确的。

我认为您目前可以即时实例化一个新的测试器,但这并不是真正的设计,也不是我想要鼓励的模式。事实上,我们最近有一个类似的错误案例,因为目标/环境组合正在实例化两个不同的测试人员。因此,将来我希望看到实例化第二个测试仪会引发错误,就像您今天尝试实例化第二个 DUT 对象时一样。顺便说一句,这不仅仅是品味问题,注册/取消注册当前运行时以侦听回调和类似的事情涉及到相当多的工作,如果我们限制,则更容易管理和推理DUT 和测试仪可以更改到目标负载事件内的时间。

我认为Configurable Targets大致就是你想要的,从 API 的角度来看,这看起来很干净:

# target/my_test_target.rb
options[:tester].new
MyDUT.new

然后在您的测试代码中:

Origen.load_target('my_test_target', tester: OrigenTesters::V93K)
tester.v93k?   # => true
tester.j750?   # => false
Origen.load_target('my_test_target', tester: OrigenTesters::J750)
tester.v93k?   # => false
tester.j750?   # => true   

但是这里有一个弱点:像这样以编程方式操作目标的 API 并没有真正跟上这样一个事实,即一个约定已经演变为在环境中加载测试器,在目标中加载 DUT。

我们肯定希望继续强制加载目标或环境将始终意味着两者都被加载。但是,我们可能也应该引入可配置环境的概念:

# environment/configurable.rb
options[:tester].new

然后在您的测试代码中:

# Calling this would re-load the current target as well
Origen.load_environment('configurable', tester: OrigenTesters::V93K)
tester.v93k?   # => true
tester.j750?   # => false
Origen.load_environment('configurable', tester: OrigenTesters::J750)
tester.v93k?   # => false
tester.j750?   # => true   

但是,在撰写本文时,该 API 尚不受支持。

于 2017-08-30T09:03:54.147 回答