Information in this topic applies to desktop applications only. |
Connected and Self-Testing applications are deprecated. These technologies will be removed in one of the future releases of TestComplete. To create test code that runs from within your tested apps, use TestLeft, a SmartBear functional testing tool for developers. |
Creation of a C# Self-Testing Application includes the following steps:
- Adding assemblies to your C# project
- Writing test code in your C# Self-Testing Application
- (Optional) Writing code in your TestComplete project
The description of each step is below. As you will see, the creation of a Self-Testing Application is very similar to creating a Connected Application. The key difference is that the Self-Testing Application should run test code in a separate thread (see below).
Requirements
You can create C# Self-Testing Applications in Visual Studio 2013 or earlier. Visual Studio 2015 and later are not supported for this.
Adding Assemblies
To make your C# application a Self-Testing Application, you need to add the following two assemblies to your C# project:
Assembly | Description |
---|---|
AutomatedQA.script.dll | This assembly adds the late binding functionality to your C# application. In addition, it holds declarations of the AutomatedQA.script namespace and the var class used to write test code. You can use it for creating Self-Testing Applications, and it simplifies the process of working with OLE servers. For more information on this, see Writing C# Scripts. |
AutomatedQA.TestComplete.CSConnectedApp.dll | This assembly provides access to TestComplete global programming objects such as Log , TestedApps , etc. In addition, the assembly includes a declaration of the AutomatedQA.TestComplete namespace and the Connect class. |
By default both assemblies are located in the <TestComplete>\Connected Apps\.NET folder.
To add these assemblies to your project, perform the following operations:
-
Create a new C# project or open an existing one in Visual Studio .NET (Visual Studio 2005).
-
In Visual Studio .NET 7.x, right-click your project in the Solution Explorer and select Add Reference from the context menu. In the resulting Add Reference dialog:
-
Switch to the .NET tabbed page.
-
Click the Browse button to call the standard Open File dialog and open the AutomatedQA.TestComplete.CSConnectedApp.dll library.
-
Click Browse again and add the AutomatedQA.script.dll library.
- After you have added these libraries to the component list, click OK to close the Add Reference dialog.
-
-
In Visual Studio 2005, do the following:
-
Right-click your project in the Solution Explorer and then select Add Reference from the context menu.
-
In the resulting Add Reference dialog, switch to the Browse tabbed page.
-
Open the AutomatedQA.TestComplete.CSConnectedApp.dll and AutomatedQA.script.dll libraries (to select several files, press Ctrl and keep it pressed when clicking the desired files).
-
After you have added these libraries to the component list, click OK to close the Add Reference dialog.
-
-
Insert the following strings at the beginning of the source file that will contain the test code:
C#
using AutomatedQA.script;
using AutomatedQA.TestComplete;
Once you have added the assemblies and strings, you can write test code. For more information on this, see below.
Writing Test Code in C# Self-Testing Applications
-
Type the test code in your C# source, or copy the test procedure(s) from TestComplete scripts written in C#Script (though C#Script and C# are not fully compatible, copying will save the time needed for typing. If you copy the code, you will have to modify it in order to make it compatible with C#).
-
Modify the copied code so that it can be executed in your C# application.
-
Use the
Connect
class to address global programming objects of TestComplete. To use this class, add theusing AutomatedQA.TestComplete;
line to the source file that contains the testing code. Note that you can skipConnect
if the class, whose methods contain the testing code, is inherited from theConnect
class. This class contains fields whose names coincide with the names of programming objects. Therefore, the methods of this class may address these properties without usingConnect
.Note that the
Connect
class contains fields for TestComplete standard objects (Sys
,Log
,Regions
and others). It does not contain fields for objects provided by third-party plugins. To obtain these objects, use theGetObjectByName
method of theIntegration
object:C#
using AutomatedQA.TestComplete;
...
var MyObject = Connect.Integration["GetObjectByName"]("MyObjectName"); -
Replace the
function
keyword with the function's result type, for instance, replacefunction
withvoid
. -
Variables that receive results of TestComplete functions must have the
var
type. - Note for Visual Studio .NET 2003 users:
The C#Script code imported into a C# application uses objects of the
var
type. These objects are analogues to Variant variables in Visual Basic or Delphi. If you assign a C#object
to a variable or property of thevar
type, the variable or property will cause an error. For example, this may happen within an event handling routine:C#
private void axEventControl1_OnLogError(object sender, AxEventControl.ItcControlEvents_OnLogErrorEvent e)
{
var lp = (var)e.logParams; // Incorrect
lp["AdditionalText"] = "Message"; // <-- An error occurs
…
}The error happens because Visual Studio does not allow automatic construction of the base class (named
object
) to any other object:Compiler Error CS0553 'conversion routine' : user defined conversion to/from base class
User-defined conversions to values of a base class are not allowed; you do not need such an operator.To solve the problem, do the following:
C#
private void axEventControl1_OnLogError(object sender, AxEventControl.ItcControlEvents_OnLogErrorEvent e)
{
var lp = new var(e.logParams); // Correct!
lp["AdditionalText"] = "Message"; // Correct!
…
}
For more information about these modifications, see Writing C# Scripts.
-
-
Create a separate thread for the text procedure to run in, unless it does not call for onscreen inputs (e.g. button clicks, menu selections, etc.) serviced by the current thread. For example:
C#
// TestComplete namespaces
using AutomatedQA.TestComplete;
using AutomatedQA.script;
using System.Threading;
// This namespace is necessary to address classes and
// functions that work with threads
using System.Threading;
...
namespace CSConnectedApp
{
public class Form1 : System.Windows.Forms.Form
{
// Creates a thread and starts the test
private void TestProc()
{
TestClass tcls = new TestClass(); // Creates a test class instance
// Runs the thread
ThreadStart thrd_start = new ThreadStart(tcls.RunTest);
Thread thrd = new Thread(thrd_start);
thrd.Start();
}
...
}
public class TestClass : Connect
{
public void RunTest()
{
// Test code goes here
}
}
} -
TestComplete must be in the script-running mode to run the test code located in your Self-Testing Application. To run the test code, you should either launch the Self-Testing Application from the TestComplete script, or call the
Connect.RunTest
routine (see Running Connected and Self-Testing Applications for more information).If you are going to use the
Connect.RunTest
routine, insert a call to it before the first statement of the test code in your Self-Testing Application. To stop the test run initiated withConnect.RunTest
, use theConnect.StopTest
routine:C#
Connect.RunTest("My Test", "MyProject", "C:\\Work\\MyProjectSuite.pjs");
...
// Test code
...Connect.StopTest();
If you are going to launch your Self-Testing Application from TestComplete, call the test procedure from your own code. For instance, you can call the test procedure within a button’s
OnClick
event handler. -
Compile your application.
Writing Code in TestComplete Projects
In order for the Self-Testing Application to be able to use TestComplete scripting objects and post messages to the test log, TestComplete must be in the script-running mode. The testing engine switches to this mode when you run a test from TestComplete, or when you call the Connect.RunTest
routine (see Running Connected and Self-Testing Applications).
If you do not use the Connect.RunTest
routine, you should launch your Self-Testing Application from TestComplete. To do this:
-
Open your project in TestComplete.
-
Add your Self-Testing Application to the project’s tested applications list. For more information on how to do this, see Defining Applications to Test.
-
Write script code that will launch your Self-Testing Application and wait until it performs the testing actions. For example:
JavaScript, JScript
function Test()
{
var p;
// Launches the Self-Testing Application and obtains the process
// that corresponds to your Self-Testing Application
p = TestedApps.Items[0].Run();
// Delays script execution while
// the Self-Testing Application performs the testing actions
while(p.Exists)
aqUtils.Delay(500);
}Python
def Test(): # Launches the Self-Testing Application and obtains the process # that corresponds to your Self-Testing Application p = TestedApps.Items[0].Run() # Delays script execution while # the Self-Testing Application performs the testing actions while p.Exists: aqUtils.Delay(500)
VBScript
Sub Test
' Launches the Self-Testing Application and obtains the process
' that corresponds to your Self-Testing Application
Set p = TestedApps.Items(0).Run
' Delays script execution while
' the Self-Testing Application performs the testing actions
While p.Exists
aqUtils.Delay 500
WEnd
End SubDelphiScript
procedure Test;
var
p : OleVariant;
begin
// Launches the Self-Testing Application and obtains the process
// that corresponds to your Self-Testing Application
p := TestedApps.Items[0].Run;
// Delays script execution while
// the Self-Testing Application performs the testing actions
while p.Exists do
aqUtils.Delay(500);
end;C++Script, C#Script
function Test()
{
var p;
// Launches the Self-Testing Application and obtains the process
// that corresponds to your Self-Testing Application
p = TestedApps["Items"](0)["Run"]();
// Delays script execution while
// the Self-Testing Application performs the testing actions
while (p["Exists"])
aqUtils["Delay"](500);
} -
Make sure this code is called when running the current TestComplete project.
-
As you can see, the script is running until the Self-Testing Application is closed. In order to stop the script run from the Self-Testing Application, use the
Runner.Stop
method. This method instructs TestComplete that the test run is over and refreshes the Test Log so that it displays the latest test results.
Now you can run the test by clicking the button whose OnClick
event handler contains the test code.
See Also
Self-Testing Applications
Running Connected and Self-Testing Applications
Connected Applications - Overview
Creating Connected Applications in C#