小编edu*_*app的帖子

使用 pytest-mock 来模拟对象和对象方法

我正在尝试用于pytest-mock嘲笑。mock该库本质上是和的插件/包装器patch

我的问题定义为:

我有一个mymodule.py使用 SQL Alchemy 的应用程序 ( )。基本上,有一个函数定义 SQL Alchemy 中的一些对象并返回包含这些对象的字典。

def some_function1():
    # some code
    from sqlalchemy import create_engine, MetaData, Table

    engine = create_engine(f"mysql+pymysql://{username}:{password}@{host}:{port}")
    meta = MetaData(engine)
    my_table = Table(
        'my_table',
        meta,
        autoload=True,
        schema="some_schema"
    )
    db_tools = {"engine": engine, "table": my_table}
    return db_tools
Run Code Online (Sandbox Code Playgroud)

然后,第二个函数将该输出字典作为输入并使用它们:

def some_function2(db_tools, data):

    sql_query = db_tools["table"].insert().values(data)
    db_tools["engine"].execute(sql_query)
    # some more code
Run Code Online (Sandbox Code Playgroud)

所以现在我正在编写单元测试,并且我不想实际与真实的数据库进行通信。所以我只需要嘲笑所有sqlalchemy相关的东西。到目前为止,我已经成功模拟create_engine,MetaDataTable通过执行以下操作:

mocker.patch(
    'my_module.create_engine',
    return_value=True
)
mocker.patch(
   'my_module.MetaData',
   return_value=True …
Run Code Online (Sandbox Code Playgroud)

python unit-testing pytest pytest-mock

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

如何在 golem 框架闪亮包中测试模块?

我正在尝试为我的闪亮应用程序开发单元测试,该应用程序是使用golem框架和shinyv1.5.0 制作的。

\n

Golem 附带了一个推荐的测试文件,其中涵盖了非常基本的 UI 测试。然而,我更关心测试所有模块的服务器端。因此,就像您对常规 R 包中的每个函数进行测试一样,我想在我闪亮的应用程序中测试每个模块。

\n

我知道有一个testModule功能正在开发中,但它没有包含在最新的闪亮 CRAN 版本中(这正是我正在使用的版本)。只有一个testServer函数,但我发现的所有示例似乎都在测试文件中定义了模块服务器端。当模块是包的一部分时,我找不到模块测试的示例。

\n

所以我想做的基本上是一个位于内部的测试tests/testthat/test-my_module.R,看起来像这样:

\n
\ntest_that("The module receives its input", {\n    shiny::testServer(\n        app = mypackage::my_module_server,\n        args = list(),\n        session = MockShinySession$new(), {\n        session$setInputs(some_input = 100)\n        expect_equal(output$some_output, 50)\n    })\n})\n
Run Code Online (Sandbox Code Playgroud)\n

但是,这会引发错误:

\n
Error in UseMethod("as.shiny.appobj", x) : \n  m\xc3\xa9todo n\xc3\xa3o aplic\xc3\xa1vel para 'as.shiny.appobj' aplicado a um objeto de classe "function"\n
Run Code Online (Sandbox Code Playgroud)\n

这基本上表明指定的方法在应用于函数类对象时不起作用。

\n

我在这里错过了什么吗?

\n

希望能讨论一下在将闪亮的应用程序开发为包时如何进行测试。

\n

r testthat shiny golem

6
推荐指数
1
解决办法
712
查看次数

R 使用 %within% 运算符而不调用库(lubridate)

我正在编写一个使用一些lubridate函数的函数。

但是,我不确定如何%within%从 lubridate 导入该函数。通常这很容易,因为我只使用 lubridate::function 。当我使用 %within% 运算符尝试此操作时,这不起作用。有没有办法在不加载整个包的情况下使用包中的运算符?

r lubridate

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

如何仅使用基数 R 创建二叉树?

仅使用基本 R 功能/工具创建二叉树的最佳方式是什么(假设在这种情况下,最佳意味着“创建或访问的最快方式”)?我假设某种形式的递归和/或使用环境操作的数据结构是必要的?

更重要的是,我希望二叉树的创建被参数化为应该生成什么类型​​的树(例如:一个完美的,其中所有节点都有两个孩子?)。

例子:

my_tree <- grow_tree(perfect = FALSE, max_height = 3)
print(my_tree)

my_tree[1]
1

my_tree[1][left]
2

my_tree[1][right]
3

my_tree[1][left][left]
4
Run Code Online (Sandbox Code Playgroud)

应该是一棵树的表示,看起来像:

    1
   / \
  2   3
 /
4
Run Code Online (Sandbox Code Playgroud)

注意:随意使用 S3 或 S4,考虑到它们是在基础 R 中提供的。但是,如果没有它们,看到解决方案会很有趣。

binary-tree r

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