小编Mot*_*tti的帖子

我可以使用VBScript以外的语言以编程方式执行QTP测试吗?

我有VBScript代码,它启动QuickTest Professional,执行一系列QTP测试,并通过电子邮件发送结果.这很好用,但我更喜欢使用具有更好工具支持的语言(例如,一个好的IDE).我目前正在从启动脚本调用.Net库,所以我想知道是否可以使用像C#这样的语言来完成相同的任务.如果是这样,是否有任何好的资源可以解决这个问题?我可以通过谷歌找到关于这个主题的很少的内容,似乎没有关于这个主题的任何其他问题.

为清楚起见,我已经包含了完成大部分工作的例程的代码.这不包括净声明,但failedTestsListallTestsList是实例System.ArrayList.

编辑:所有QTP文档示例都使用VBScript,但正如您所看到的,代码只是创建QTP对象.我认为这些可以从支持创建这些对象的另一种语言调用.从我的谷歌失败看来,似乎没有人这样做.

Sub ExecuteQTPTest(name)
    Dim App, resultsPath
    Dim testPath, testResults
    testPath = name
    allTestsList.Add(name)
    Set App = CreateObject("QuickTest.Application")

    App.Launch
    App.Visible = False
    App.Open testPath

    SetQTPTestOptions(App)
    SetQTPRunOptions(App)
    SetQTPWebOptions(App)

    App.Folders.RemoveAll

    Dim qtpTest, qtpResultsOpt
    Set qtpTest = App.Test
    Set qtpResultsOpt = CreateObject("QuickTest.RunResultsOptions")

    resultsPath = testPath & "\RES1"

    qtpResultsOpt.ResultsLocation = resultsPath

    qtpTest.Run qtpResultsOpt ''// Run the test

    testResults = "Test Status: " & qtpTest.LastRunResults.Status & vbCrLf & _
          "Last Error: " & qtpTest.LastRunResults.LastError & vbCrLf …
Run Code Online (Sandbox Code Playgroud)

c# vbscript automation qtp

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

真的不可能使用返回类型重载?

我用两种方法在MSIL中创建了一个小DLL:

float AddNumbers(int, int)
int AddNumbers(int, int)
Run Code Online (Sandbox Code Playgroud)

正如你们可能知道的那样,MSIL允许你创建具有相同参数的方法,只要你有不同类型的返回类型(所谓的返回类型重载).现在,当我尝试从c#中使用它时,正如我所期待的那样,它发出错误:

float f = ILasm1.MainClass.AddNumbers(1, 2);
Run Code Online (Sandbox Code Playgroud)

错误是:

以下方法或属性之间的调用不明确:'ILasm1.MainClass.AddNumbers(int,int)'和'ILasm1.MainClass.AddNumbers(int,int)'

c#真的无法区分不同的返回类型吗?我知道我不能编写只有不同返回类型的方法,但我总是认为它会知道如何处理它.

.net c#

11
推荐指数
3
解决办法
4606
查看次数

如何将本地CComSafeArray返回到LPSAFEARRAY输出参数?

我有一个COM函数应该通过LPSAFEARRAY*out参数返回一个SafeArray .该函数使用ATL的CComSafeArray模板类创建SafeArray .我的天真实现用于CComSafeArray<T>::Detach()将所有权从局部变量移动到输出参数:

void foo(LPSAFEARRAY* psa)
{
    CComSafeArray<VARIANT> ret;
    ret.Add(CComVariant(42));
    *psa = ret.Detach();
}

int main()
{
    CComSafeArray<VARIANT> sa;
    foo(sa.GetSafeArrayPtr());

    std::cout << sa[0].lVal << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

问题是CComSafeArray::Detach()执行一个Unlock操作,以便当SafeArray的新所有者(sa在这种情况下为main )被销毁时,锁定不为零并且Destroy无法解锁SafeArray E_UNEXPECTED(这导致内存泄漏,因为SafeArray不是解除分配).

通过COM方法边界将所有权转移到CComSafeArrays的正确方法是什么?


编辑:从单个答案到目前为止似乎错误是在客户端(main)而不是从服务器端(foo),但我发现很难相信这CComSafeArray不是为这个琐碎的用例设计的,必须是一种优雅的方法,可以将COMA方法中的SafeArray转换为CComSafeArray.

c++ com atl safearray

11
推荐指数
2
解决办法
4372
查看次数

c ++ 0x标准库参考手册

我用C++编写了多年,最近听说有一个C++标准的新版本.我研究了标准草稿,发现有很多新东西会让我的编程变得更容易.所以我想在它出来之前习惯新标准.但是,如果没有合适的参考手册,使用新的标准库进行编码是相当困难的.我用谷歌搜索,发现只有一些页面,如维基百科的C++ 0x页面,不是参考手册.有谁知道任何C++ 0x标准库参考手册?我正在寻找类似于MSDN的标准C++库参考的东西.

c++ standards reference manual c++11

11
推荐指数
2
解决办法
1311
查看次数

Concepts-Lite如何与可变参数模板交互?

我观看了Bjarne Strustrup在Going Native 2013中的演讲,他给出了以下关于C++即将出现的概念特色的例子.

void sort(Container& c); // terse notation

// Expands to
template <Container __Cont>
  void sort(__Cont& c); // shorthand notation

// Expands to 
template <typename __Cont>
  requires Container<__Cont>()
    void sort(__Cont & c);
Run Code Online (Sandbox Code Playgroud)

我的问题是如何使用可变参数模板?

假设我想maximum使用Comparable概念定义可变参数函数.是否接受以下语法?

auto maximum(Comparable a)
{
     return a;
}

auto maximum(Comparable c, Comparable... rest)
{        
    return std::max(a, maximum(rest...));
}
Run Code Online (Sandbox Code Playgroud)

如果是这样Comparable...意味着参数包中的所有元素都是相同的类型,或者只是它们都是Comparable类型,以便包可以包含intstring?(两者相当,但彼此不相同)

好奇的人想知道.

c++ variadic-templates c++-concepts

11
推荐指数
2
解决办法
1637
查看次数

尝试/最终忽略异常吗?

我有一种情况,我希望无论发生什么事情都要执行某些代码,但我需要将异常传递到堆栈中以便稍后处理.以下是:


try
{
  // code
}
finally
{
  // code that must run
}
Run Code Online (Sandbox Code Playgroud)

只是忽略任何异常,还是会将它们传递给它们?我的测试似乎表明他们仍然被传递,但我想确定我不是疯了.

编辑:我的问题不是关于何时以及最终是否会执行,而是关于异常是否仍然被抛出,但现在已经得到了回答.

exception-handling exception finally

10
推荐指数
2
解决办法
3876
查看次数

如何让MIDL搜索合格路径的其他包含目录

更新:在打开微软支持电话后的六个月内,它被拒绝,他们声称这不是一个错误(因为文档没有明确说明所看到的行为不正确).他们拒绝DCR说,由于他们在过去十年没有听到任何投诉,这显然不是一个常见的用例.

这是对武器的呼吁,如果您遇到同样的问题,请打开与Microsoft的支持电话,以便他们了解应该修复它.我知道至少有人遇到了同样的问题,因为我在Chrome的源代码中发现了这条评论:

#构建.idl文件.
#这是一团糟.MIDL需要从$ OPEN_DIR运行,因为
#将其包含路径应​​用到像"ui/ie/bla.idl"这样的相对路径
#(它只查看当前目录)太愚蠢了.所以我们必须跳过箍来修复
#我们的相对包含路径和输出文件.


原始问题:

我有以下文件结构:

  • C:\first\Foo.idl
  • C:\second\Bar.idl

其中Bar.idl包含以下行:

import "first/Foo.idl";
Run Code Online (Sandbox Code Playgroud)

如何从编译时获得midl编译?Bar.idlC:\second

如果我Foo.idl直接导入(没有指定first/),那么指定first为一个额外的包含目录就足够了(midl /I c:\first Bar.idl)并且它会找到Foo.idl

或者,如果我从C:\(midl second\Bar.idl)编译也可以.

问题是,当C:\second使用命令行从内部编译时midl /I C:\ Bar.idl,我得到以下编译错误:

c1:致命错误C1083:无法打开源文件:'first\Foo.idl':没有这样的文件或目录

看起来midl只是在相对于当前目录而不是指定的其他包含目录之一时才愿意搜索相对路径,并且仅对非限定文件名使用其他包含目录,此行为特定于import关键字,使用include结果如预期.

我希望能够添加两个不同的附加包含目录,这样如果我在本地计算机上有文件midl将采用该版本,否则它将从服务器获取文件(因此chdir转到根文件夹不是一个选项).

有办法解决这个问题吗?

relative-path midl include-path

10
推荐指数
1
解决办法
3094
查看次数

是C++ is_lambda特性,纯粹作为库实现,不可能吗?

我有一个关于C++ 0x lambdas的问题.在我的代码中,知道给定类型是否是C++ 0x lambda表达式的类型将是有益的.举个例子:

struct foobar
{
  void operator()()
  {
  }
};

auto lambda = []{};
typedef is_lambda < decltype(lambda) > ::type T; // T would be a true_type
typedef is_lambda < foobar > ::type T; // T would be a false_type
Run Code Online (Sandbox Code Playgroud)

将lambda表达式与函数和成员函数类型区分开来相当容易.函子是另一回事.

我在这里看到的问题是根据即将推出的C++ 0x标准定义lambda表达式; 唯一必须定义的是公共呼叫运营商.然而,对于仿函数也是如此; 测试调用操作符的存在是不足以区分lambda表达式和仿函数.此外,如果存在仿函数的运算符,则会发生编译器错误,因为SFINAE不适用.这是什么时候发生的?仿函数的调用操作符可能是模板化的.所以,这样的代码:

typedef decltype(&T::operator()) call_type;
Run Code Online (Sandbox Code Playgroud)

将使用非模板化调用运算符的lambda表达式和仿函数,并为模板化调用运算符生成编译器错误.

我相信is_lambda < >只能使用内部编译器功能创建特征.你看到了如何实现这个特性的方法吗?

c++ lambda traits c++11

10
推荐指数
2
解决办法
2066
查看次数

在部分类中实现接口

考虑一个实现大量接口的类,使用partial class定义在单独的文件中实现每个接口是否有意义?

这是滥用语言功能还是我不知道的成语?

.net c# interface code-organization partial-classes

10
推荐指数
1
解决办法
5272
查看次数

WebSocket到localhost无法在Microsoft Edge上运行

我创建了一个简单的WebSocket服务器,并尝试使用以下代码连接到它:

function test(name) {
    var ws = new WebSocket('ws://localhost:1234');
    ws.onopen = function () {
        ws.send('Hello from ' + name);
    }
}
test('Edge');
Run Code Online (Sandbox Code Playgroud)

这在Windows10上的Chrome和IE11上运行良好但是当我从Edge尝试时,该onopen函数未被调用,而是最终我得到以下错误:

SCRIPT12029:WebSocket错误:网络错误12029,无法建立与服务器的连接

这发生在Edge的12.10240版本中.

这里询问了类似的问题,但错误信息不同.

我试过的事情:

  • IP - localhost,, 127.0.0.1实际IP
  • 允许localhost环回标志 - 打开和关闭

尝试与其他计算机通信时,不会发生此问题.

这是Edge中的缺陷还是我做错了什么?

javascript websocket microsoft-edge

10
推荐指数
1
解决办法
1万
查看次数