我有像这样的功能测试的层次结构
[TestClass]
class BaseClass
{
// specific methods and members relevant to all functional tests are here
// ie how to work with db
}
[TestClass]
class Module1:BaseClass
{
[ClassInitialize]
public static void Module1TestsInit(TestContext context)
{
//create some db data here, which is needed only for Module1
}
[ClassCleanup]
public static void Module1TestsCleanup()
{
//delete Module1 db data
}
}
[TestClass]
class Module2:BaseClass
{
[ClassInitialize]
public static void Module2TestsInit(TestContext context)
{
//create some db data here, which is needed only …Run Code Online (Sandbox Code Playgroud) 我正在尝试测试我的注册控制器(它会覆盖Devise的内置控制器),但是当我进行以下测试时:
test "should create user" do
post :create, user: { email: "temp12345@email.com", first_name: @user.first_name}
assert_redirected_to user_path(assigns(:user))
end
Run Code Online (Sandbox Code Playgroud)
但是,回复的回复显示"您必须注册/登录才能继续"这没有任何意义,因为我可以从浏览器手动执行此操作以注册用户.
有任何想法吗?
我是QTP的新手,刚刚开始使用它.我在一些函数库中编写了一个类定义,并在下面创建了一个测试:
Class ExcelFileReader
Public default Function Init(pathToExcel)
Dim objFSO
Dim result
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(pathToExcel) Then
Rem File Found
Dim objExcel
Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.open(pathToExcel)
Else
REM File not found
result = vbOk
While result <> vbCancel
result = Msgbox ("Unable to Locate the file", 5, "Error")
Wend
ExitAction(1)
End If
End Function
Run Code Online (Sandbox Code Playgroud)
结束班
测试:
Dim objExcelReader : Set objExcelReader = New ExcelFileReader
objExcelReader.Init("D:\mytest.xlsx")
Run Code Online (Sandbox Code Playgroud)
我已将功能库与测试相关联,但仍未在测试说明未找到类定义的第2行收到错误.此外,如果我在同一个文件"test"中复制完整代码,那么事情就会按预期工作.
提前致谢 :)
我正在对Symfony2控制器进行功能测试,继承我的测试类:
class InsecureWebTestCase extends WebTestCase {
protected $client = null;
public function setUp() {
$this->client = static::createClient();
$session = $this->client->getContainer()->get('session');
$firewall = 'default';
$token = new UsernamePasswordToken('norbert.scrunge@gmail.com', null, $firewall, array('ROLE_USER', 'ROLE_ADMIN'));
// $this->client->getContainer()->get('security.context')->setToken($token);
$session->set("_security_$firewall", serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$this->client->getCookieJar()->set($cookie);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将控制器用作应用程序的一部分:
$this->container->get('security.token_storage')->getToken()->getUser()并且$this->getUser()是我的Doctrine"用户"实体的实例.
但运行功能测试时:
$this->container->get('security.token_storage')->getToken()->getUser()是包含用户名和一个字符串$this->getUser()是NULL.
在我的应用和功能测试中,我需要做些什么才能使行为保持一致?
我正在使用HSQLDB为我的应用程序编写一些功能测试.我的应用程序生成以下SQL请求:
SELECT
CLIENT.account_id,
CLIENT.client_code,
SHIPPINGADDRESS10A9.account_id,
SHIPPINGADDRESS10A9.address_code
FROM CLIENT
LEFT JOIN ADDRESS SHIPPINGADDRESS10A9
ON SHIPPINGADDRESS10A9.address_code = CLIENT.shipping_address_code AND (SHIPPINGADDRESS10A9.account_id = 4)
WHERE CLIENT.account_id = 4
Run Code Online (Sandbox Code Playgroud)
此请求有效,可以使用我的代码(JDBC + MySQL).当我尝试使用HSQLDB执行我的功能测试时,我得到以下异常:
resultSet.findColumn("CLIENT.account_id"); //Works
resultSet.findColumn("SHIPPINGADDRESS10A9.account_id"); //Exception
Caused by: java.sql.SQLException: Column not found: SHIPPINGADDRESS10A9.account_id
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCResultSet.findColumn(Unknown Source)
at com.inventis.bw.data.DataBaseUtil.loadBean(DataBaseUtil.java:419)
... 33 more
Caused by: org.hsqldb.HsqlException: Column not found: SHIPPINGADDRESS10A9.account_id
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
... 36 more
Run Code Online (Sandbox Code Playgroud)
知道我在这里做错了什么吗?
编辑: 看起来问题来自表别名.
logger.debug("address account id => " + …Run Code Online (Sandbox Code Playgroud) 我有一个功能测试套件,使用 pytest-dependency 来在它们依赖的其他测试失败时跳过测试。这样,例如,如果登录页面损坏,我会收到一个测试失败,提示“登录页面损坏”,而不是一系列测试失败提示“我无法登录用户 X”、“我无法登录”。登录用户 Y”等
这对于运行整个套件非常有用,但我正在尝试缩短我的编辑-编译-测试循环,而现在最慢的点是测试我的测试。如果我正在进行的测试有许多它所依赖的其他测试,那么它们都必须成功才能不跳过我正在尝试测试的测试。因此,我要么必须运行整个依赖关系树,要么注释掉我的@pytest.mark.dependency(...)装饰器(这是我作为一个人必须记住要做的另一件事)。从技术上讲,这些依赖的测试没有做任何事情来使它们的依赖者能够运行 - 我想要这些依赖项的唯一原因是为了让我更容易对测试失败进行分类。
是否有一个命令行参数可以告诉 pytest-dependency 不要因依赖项而跳过某些内容,或者告诉 pytest 在本次运行(并且仅此运行)中不要使用 pytest-dependency 插件?
假设 API 请求获取用户 ID、电子邮件地址和他们指定的角色。示例 API 请求如下:
GET: /v1/users HTTP/1.1
Content-Type: application/json
Authorization: bearer {access_token}
Run Code Online (Sandbox Code Playgroud)
对于上述请求,响应如下:
{
"content": [
{
"id": 1,
"email": "random@random.com",
"full_name": "AlbusDumbledore",
"role": "OWNER"
},
{
"id": 40,
"email": "random1@random1.com",
"role": "OWNER"
}
],
"last": false,
"total_elements": 2,
"total_pages": 1,
"sort": null,
"first": true,
"number_of_elements": 2,
"size": 20,
"number": 0
}
Run Code Online (Sandbox Code Playgroud)
现在,在 postman 中将进行什么测试以确保角色节点下的所有返回值都等于 OWNER?
我有一个控制器端点,它在后台执行外部 API 请求,但我每次运行测试时都无法真正发出该请求。
我用来HttpClientInterface提出请求,现在我的想法是将其替换为MockHttpClient. 到目前为止,这是我所拥有的:
class MyControllerTest extends WebTestCase
{
public function testSomething(): void
{
$client = static::createClient();
$response = new MockResponse(null, ['http_code' => 200]);
$client->getContainer()->set(HttpClientInterface::class, new MockHttpClient($response));
$client->request('GET', '/my-end-point');
self::assertResponseIsSuccessful();
}
}
Run Code Online (Sandbox Code Playgroud)
但它给了我以下错误:
The "Symfony\Contracts\HttpClient\HttpClientInterface" service is private, you cannot replace it
Run Code Online (Sandbox Code Playgroud)
这有点道理。有没有更好的解决方案或者如何克服这个问题?
我的问题假设人们已经相信某种单元测试是值得的,并且实际上是在他们当前的项目上写下来的.我们还假设代码的某些部分的单元测试不值得写,因为它们正在测试琐碎的功能.示例是getter/setter,和/或编译器/解释器将立即捕获的内容.相反的假设是"有趣的"代码值得测试.
我正在为我的项目编写测试,在单元测试之后,我正在编写FunctionalTest.
但在功能与硒测试的目标之间,我有点迷失.
功能测试是否只是在这里测试,无论我发送到任何页面(主要是在POST),它应该返回我期望的(200,302,404,500),还是更多?(比如测试返回的页面是否是我期望的那个(比如"登录页面"?或者这个测试应该在Selenium中?)
因为到目前为止,我的F测试只是一堆函数,
assertStatus每个都有一个,我觉得它有点无用.我相信我可以做得更多,但不知道为什么.
您在功能测试中测试了什么?