我想用selenium验证在JavaScript对象上调用了某些方法(带参数) - 用JMockit进行模拟,但是在Javascript和selenium中.
不幸的是,对象是严重不透明的不透明网站性能跟踪器,我无法访问其内部,所以嘲笑似乎是我唯一的选择.或者我会错过一些明显的东西?
更新:在考虑之后,在我看来解决方案可能是: - 等待HTML完全加载 - 删除包含性能跟踪器的某些脚本标记 - 创建javascript模拟对象,表现得像跟踪器,但记录调用以供以后使用
我正在尝试实现一个简单的比较器,用于根据数组"_vec"中的值对索引进行排序.我收到"无效<运营商"运行时错误消息.我无法理解以下代码有什么问题:
class Compare{
vector<int>& _vec;
public:
Compare(vector<int>& vec) : _vec(vec) {}
bool operator()(size_t i, size_t j){
if(_vec[i] != _vec[j])
return _vec[i] < _vec[j];
else
return (double)rand()/RAND_MAX < 0.5;
}
};
Run Code Online (Sandbox Code Playgroud)
我正在使用以下函数调用:
sort(inds.begin(),inds.end(),Compare(vals));
Run Code Online (Sandbox Code Playgroud)
其中inds只是一个包含索引从1到15(比如说)的数组,而vals是长度为15的数组,其中包含一些我希望计算其排序索引的值.总体目标是在val中的两个(或更多)条目相等时随机化排序顺序.有帮助吗?
我正在使用Mocha进行单元测试,使用Chai进行断言.
我想找到一个易于使用的解决方案来检查对象是否具有我的比较对象中定义的结构和属性.但我不需要对象完全相等.被测对象应该至少包含我的测试对象中的所有属性,但它也可能包含当时未测试的其他属性.
所以,我想测试一个单元来检查它返回的对象是否至少有一个名为'foo'的属性,它本身就是一个至少包含值为10的属性'bar'的对象.所以,我有这个预期的结果测试:
var expected = {foo: {bar: 10}};
Run Code Online (Sandbox Code Playgroud)
我打电话给我的单位并将我的测试主题放在一个变量中sut:
var sut = MyUnit.myFunction();
Run Code Online (Sandbox Code Playgroud)
所以对于各种suts,我期待这些结果:
// Success. Exact match
{foo: {bar: 10}}
// Fail. Structure is ok, but property value is wrong.
{foo: {bar: 11}}
// Fail. property bar is missing.
{foo: {qux: 20}}
// Success. All properties match. Extra properties (baz) in sut are ignored:
{baz: 'a', foo: {bar: 10, baz: 20}}
Run Code Online (Sandbox Code Playgroud)
然后我想以方便的方式比较它.我可以单独测试所有属性或在多个测试中拆分它,但我希望我可以做类似的事情
sut.should.deep.contain.all(expected);
Run Code Online (Sandbox Code Playgroud)
但是,即使对象完全相同,我也得到了以下令人惊讶的结果:
AssertionError:期望{foo:{bar:10}}的属性'foo'为{bar:10},但得到{bar:10}
当然我试过这个,以及其他几个变种.如果对象包含额外的属性,则最简单的相等测试不起作用.
sut.should.eql(expected);
Run Code Online (Sandbox Code Playgroud)
AssertionError:期望{foo:{bar:10,qux:20}}深度相等{foo:{bar:10}}
我测试过的其他组合have和contains一起deep …
我有两个Json对象需要进行比较.我正在使用Newtonsoft库进行Json解析.
string InstanceExpected = jsonExpected;
string InstanceActual = jsonActual;
var InstanceObjExpected = JObject.Parse(InstanceExpected);
var InstanceObjActual = JObject.Parse(InstanceActual);
Run Code Online (Sandbox Code Playgroud)
我正在使用Fluent Assertions对它进行比较.但问题是Fluent断言仅在属性count/names不匹配时才会失败.如果json值不同则会通过.当值不同时,我要求失败.
InstanceObjActual.Should().BeEquivalentTo(InstanceObjExpected);
Run Code Online (Sandbox Code Playgroud)
例如,我有实际和预期的json比较如下.并且使用上面的比较方式使得它们传递错误.
{
"Name": "20181004164456",
"objectId": "4ea9b00b-d601-44af-a990-3034af18fdb1%>"
}
{
"Name": "AAAAAAAAAAAA",
"objectId": "4ea9b00b-d601-44af-a990-3034af18fdb1%>"
}
Run Code Online (Sandbox Code Playgroud) 我正在从 JSON 读取数据结构。有一些转换正在进行,最后我有一个struct字段是 type 的地方interface{}。它实际上是一张地图,所以 JSON 将它放在一个map[string]inteface{}.
我实际上知道底层结构是map[string]float64并且我想这样使用它,所以我尝试做一个断言。以下代码重现了该行为:
type T interface{}
func jsonMap() T {
result := map[string]interface{}{
"test": 1.2,
}
return T(result)
}
func main() {
res := jsonMap()
myMap := res.(map[string]float64)
fmt.Println(myMap)
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
panic: interface conversion: main.T is map[string]interface {}, not map[string]float64
Run Code Online (Sandbox Code Playgroud)
我可以执行以下操作:
func main() {
// A first assertion
res := jsonMap().(map[string]interface{})
myMap := map[string]float64{
"test": res["test"].(float64), // A second assertion
}
fmt.Println(myMap)
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我发现它非常难看,因为我需要重建整个地图并使用两个断言。有没有正确的方法来强制第一个断言放弃interface{}并使用float64 …
我正在使用 Microsoft 的 CppUnitTestFramework 编写一些单元测试。
我想测试一下,我调用的方法是否抛出了正确的异常。我的代码是:
TEST_METHOD(test_for_correct_exception_by_input_with_whitespaces)
{
std::string input{ "meet me at the corner" };
Assert::ExpectException<std::invalid_argument>(AutokeyCipher::encrypt(input, primer));
}
Run Code Online (Sandbox Code Playgroud)
在下面的链接中,我写了类似于上一个答案的电话:
编译它时,我收到C2064错误:术语不计算为采用 0 个参数的函数
为什么这不起作用?
c++ unit-testing exception assertion microsoft-cpp-unit-test
我正在使用 Java 和 AssertJ 测试一些 UI 功能。因此,当我从 UI 收到一些大字符串时,我应该验证该字符串是否至少包含一个来自List<String>. 做相反的事情很容易 - 验证列表是否至少包含一次某个字符串值,但这不是我的情况。我在标准方法中找不到解决方案。
public static final List<String> OPTIONS = Arrays.asList("Foo", "Bar", "Baz");
String text = "Just some random text with bar";
Run Code Online (Sandbox Code Playgroud)
我需要的是这样的:
Assertions.assertThat(text)
.as("Should contain at least one value from OPTIONS ")
.containsAnyOf(OPTIONS)
Run Code Online (Sandbox Code Playgroud) 代码:
from unittest.mock import MagicMock, call
mm = MagicMock()
mm().foo()['bar']
print(mm.mock_calls)
print()
mm.assert_has_calls([call(), call().foo(), call().foo().__getitem__('bar')])
Run Code Online (Sandbox Code Playgroud)
输出:
[call(), call().foo(), call().foo().__getitem__('bar')]
Traceback (most recent call last):
File "foo.py", line 9, in <module>
mm.assert_has_calls([call(), call().foo(), call().foo().__getitem__('bar')])
TypeError: tuple indices must be integers or slices, not str
Run Code Online (Sandbox Code Playgroud)
如何修复这个断言?
我使用org.junit.jupiter.api.Assertions对象来断言抛出异常:
Assertions.assertThrows(
InvalidParameterException.class,
() -> new ThrowingExceptionClass().doSomethingDangerous());
Run Code Online (Sandbox Code Playgroud)
简单地说,抛出的异常dateTime在其消息中有一个可变部分:
final String message = String.format("Either request is too old [dateTime=%s]", date);
new InvalidParameterException(message);
Run Code Online (Sandbox Code Playgroud)
随着版本我用5.4.0了Assertions提供三种方法检查异常被抛出:
assertThrows?(Class<T> expectedType, Executable executable)assertThrows?(Class<T> expectedType, Executable executable, String message)assertThrows?(Class<T> expectedType, Executable executable, Supplier<String> messageSupplier)它们都没有提供检查字符串是否以另一个字符串开头的机制。最后 2 个方法只检查 String 是否相等。我如何轻松检查异常消息是否以 开头,"Either request is too old"因为在同一InvalidParameterException.
我很欣赏一种方法assertThrows?(Class<T> expectedType, Executable executable, Predicate<String> messagePredicate),其中谓词将提供抛出message的断言,并且当谓词返回时断言通过,true例如:
Assertions.assertThrows(
InvalidParameterException.class,
() -> …Run Code Online (Sandbox Code Playgroud) 我想扩展这个问题,因为我有类似的问题:
我想要,cy.get('#lead_name').type('foo')但在加载表单时它被不透明度 0.9 的元素覆盖:
<div class="blockUI blockOverlay" style="z-index: 1000; border: none; margin: 0px; padding: 0px; width: 665px; height: 100%; top: 0px; left: 0px; background-color: rgb(0, 0, 0); opacity: 0.9; cursor: wait; position: absolute;"></div>
Run Code Online (Sandbox Code Playgroud)
当我开始断言时
cy.get('#lead_name').should('be.visible)
Run Code Online (Sandbox Code Playgroud)
它通过了断言(也许是因为不透明度?),但是当我尝试在字段中输入时,我收到了该元素被覆盖的错误消息。
当我尝试断言覆盖层不再存在并添加
cy.get('.blockUI blockOverlay').should('not.exist')
Run Code Online (Sandbox Code Playgroud)
即使该元素确实存在,Cypress 也会通过断言并覆盖其他元素并cy.get('#lead_name').type('foo')失败。
有什么办法可以解决这个问题吗
//This does not work it's just a sample to explain what I want to do
//test if the element I want to get is not covered
cy.get('#lead_name').should('not.be.covered')
//or test if the element …Run Code Online (Sandbox Code Playgroud)