小编Ste*_*ven的帖子

EF Core 3.1 在 Sqlite 内存数据库中创建视图以进行测试

我正在使用 EF Core 3.1 为 SqlServer 构建我的数据库模型。我还使用 EF 生成的迁移文件来处理数据库更改。为了进行测试,我正在按照微软文档中的描述启动内存中的 Sqlite 关系数据库:https : //docs.microsoft.com/en-us/ef/core/miscellaneous/testing/sqlite

我所有的测试都按预期运行,直到我将视图添加到我的数据库中。根据此文档添加了视图:https : //docs.microsoft.com/en-us/ef/core/modeling/keyless-entity-types

根据 Microsoft 文档,测试示例应如下所示:

[Fact]
public void Add_writes_to_database()
{
    // In-memory database only exists while the connection is open
    var connection = new SqliteConnection("DataSource=:memory:");
    connection.Open();

    try
    {
        var options = new DbContextOptionsBuilder<BloggingContext>()
            .UseSqlite(connection)
            .Options;

        // Create the schema in the database
        using (var context = new BloggingContext(options))
        {
            context.Database.EnsureCreated();
        }

        // Run the test against one instance of the context
        using …
Run Code Online (Sandbox Code Playgroud)

c# testing entity-framework ef-core-3.1

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

Selenium隐式等待与Thread.sleep()

根据selenium,隐式等待轮询DOM一段时间以查看元素是否显示.我的理解是它将轮询到指定的时间量,但如果之前显示了一个元素,那么它将继续而无需进一步等待.

http://seleniumhq.org/docs/04_webdriver_advanced.html

我有一个在大约13秒内运行的方法.当我将隐式等待设置为100秒时,需要213秒.

driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)

看来在这种方法中,我等了2次(每次100秒).将隐式等待设置为0或100不会影响我的方法.在这两种情况下,他们都正确完成.

我的问题是这个.我认为隐式等待等待元素显示的最短时间.这是正确的吗?或者我做错了什么?

此外,为什么它等待2次,显然不需要等待?(即使我将等待设置为0,我的方法也能正确完成)

dom selenium-webdriver

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

如何在plpgsql中将变量用作表名

我是plpgsql的新手.我正在尝试使用plpgsql中的变量作为表名在plpgsql中运行一个简单的查询.但是变量被解释为表名而不是被解释为变量名的变量的值.

DECLARE
  v_table text;
  z_table text;
  max_id bigint;

BEGIN

FOR v_table IN
    SELECT table_name  
    FROM information_schema.tables 
    WHERE table_catalog = 'my_database' 
    AND table_schema = 'public'
    AND table_name not like 'z_%'
LOOP
    z_table := 'z_' || v_table;
    SELECT max(id) from z_table INTO max_id;
    DELETE FROM v_table where id > max_id;
END LOOP;
Run Code Online (Sandbox Code Playgroud)

一些背景资料.对于我的数据库中的每个表,我有另一个以"z_"开头的表.例如,对于一个名为"employee"的表,我有一个名为"z_employee"的相同表.z_employee包含与员工相同的数据集.我在每次测试开始时使用它来恢复employee表.

当我运行此函数时,我收到以下错误:

ERROR:  relation "z_table" does not exist
LINE 1: SELECT max(id) from z_table
Run Code Online (Sandbox Code Playgroud)

我的猜测是我不允许z_table在SQL查询中使用该变量.至少不是我在这里使用它的方式.但我不知道它应该如何完成.

postgresql dynamic-sql plpgsql

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

每当在C#中调用方法时,是否有一种通用的方法来调用另一个方法

我有一个像这样的方法:

public Something MyMethod()
{
    Setup();

    Do something useful...

    TearDown();

    return something;
}
Run Code Online (Sandbox Code Playgroud)

Setup和TearDown方法位于基类中.

我遇到的问题是我必须使用Setup()和TearDown()方法调用一遍又一遍地编写这种类型的方法.

编辑:这个方法的棘手部分是"做一些有用的东西......"仅适用于此方法.这个部分对我创建的每个方法都不同.

另外,我可以将MyMethod2,MyMethod3放在一个类中.在所有情况下,我想运行设置和拆解

有没有一种优雅的方式来做到这一点,而不必每次都写这个?

也许我是妄想,但是这是一种向方法添加属性并拦截方法调用的方法,所以我可以在调用之前和之后做一些事情?

c# design-patterns

5
推荐指数
2
解决办法
1053
查看次数

有没有办法为每个对象编写自定义JsonConverter

我有一个像这样的Json对象:

{"company": "My Company",
"companyStart" : "2015/01/01",
"employee" : 
    { "name" : "john doe",
      "startDate" : 1420434000000 } }
Run Code Online (Sandbox Code Playgroud)

我的json对象是这样的:

public class Company {
    public string company;
    public DateTime companyStart;
    public Employee employee;
}

public class Employee {
    public string name;
    public DateTime startDate;
 }
Run Code Online (Sandbox Code Playgroud)

我原来的代码像这样反序列化

JsonConvert.DeserializeObject<Company>(jsonString);
Run Code Online (Sandbox Code Playgroud)

此代码可以毫无问题地转换Company.companyStart,但是当它到达Employee.startDate时,它不知道如何处理Long.

这篇文章向我展示了如何创建自定义JsonConverter以将long转换为DateTime,但正如您在我的案例中所看到的,这会让我无法将Company.companyStart转换为DateTime.

所以......我在考虑做这样的事情:

public class Company : JsonBase {
    ...
}

public class Employee : JsonBase {
    ...
    Employee() { Converter = new CustomDateConverter(); }
}

public class JsonBase {
    private JsonConverter …
Run Code Online (Sandbox Code Playgroud)

c# json json.net

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

在PostgreSQL中备份和还原数据进行测试的最佳方法

我正在尝试将数据库引擎从MsSql迁移到PostgreSQL。在我们的自动化测试中,我们在每次测试开始时将数据库恢复到“干净”状态。我们通过比较数据库的工作副本和干净副本(逐表)之间的“差异”来做到这一点。然后复制所有已更改的记录。或删除任何已添加的记录。到目前为止,这种策略似乎是我们最好的方法,因为每次测试不会更改很多数据,并且数据库的大小也不是很大。

现在,我正在寻找一种基本上可以使用PostgreSQL进行相同操作的方法。我正在考虑对PostgreSQL做完全相同的事情。但是在这样做之前,我想知道是否还有其他人做过类似的事情,以及您使用哪种方法在自动化测试中恢复数据。

附带说明-我考虑过使用MsSql的快照或备份/还原策略。这些方法的主要问题是,每次测试后,我都必须从应用程序重新建立数据库连接,目前无法实现。

postgresql automated-tests database-migration

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