单元测试中的元素在完成后悬而未决

Element in unit tests left pending after completion

我在 运行 测试后在 Resharper 中看到这个警告,所有测试都通过了。

2018.08.09 11:11:58.524 WARN Element Data.Tests.Infra.IntegrationTests.ResolvedIdentityTests was left pending after its run completion. 2018.08.09 11:11:58.524 WARN Element Data.Tests.Infra.IntegrationTests.ResolvedIdentityTests.Reso was left pending after its run completion.

它们是在测试数据库中设置一些 sql 的集成测试,然后针对该数据库进行测试 运行。

这是完整的测试class:

namespace Data.Tests.Infra.IntegrationTests
{
    using System;
    using System.Data.SqlClient;
    using System.Threading.Tasks;
    using Dapper;
    using Infrastructure.Models;
    using Microsoft.VisualStudio.TestTools.UnitTesting;

    [TestClass]
    public sealed class ResolvedIdentityTests
    {
        [ClassInitialize]
        public static void Initialise(TestContext context)
        {
            const string sql = @"insert into infra.tblUnresolvedIdentities
                                (DeviceId, Fqdn, TimeConflictOccured)
                                values
                                ('85E33FB5-C321-4EF2-994C-C835F136BA0C', 'unr.test.foo', '2018-08-06 12:16:24.183'),
                                ('D3F32F97-2375-47CC-86E7-37C50ABAC85F', 'unr2.test.foo', '2018-08-06 12:16:24.183')

                                insert into infra.tblOrg ([Name]) values ('rito')
                                declare @orgId int = (select OrgId from infra.tblOrg where [Name] = 'rito');

                                insert into infra.tblSite ([SiteName], [OrgId]) values ('rito.site', @OrgId);
                                declare @siteId int = (select SiteId from infra.tblSite where [SiteName] = 'rito.site');

                                insert into infra.tblDevice
                                (DeviceId, [Name], SiteId)
                                values
                                ('CE810507-C614-4C65-9675-569EEFFDBC9F', 'unr.test.foo', @siteId),
                                ('94FF1C23-0B7E-41CB-A0F8-058CED0465B3', 'blacklisted.test.foo', @siteId)

                                insert into infra.tblBlacklistedAgents
                                (DeviceId, Fqdn)
                                values
                                ('94FF1C23-0B7E-41CB-A0F8-058CED0465B3', 'rit.test.com')";
            RunSql(sql);
        }

        [ClassCleanup]
        public static void Cleanup()
        {
            const string sql = @"delete from infra.tblBlacklistedAgents where DeviceId = '94FF1C23-0B7E-41CB-A0F8-058CED0465B3'
                                 delete from infra.tblUnresolvedIdentities where DeviceId in ('85E33FB5-C321-4EF2-994C-C835F136BA0C', 'D3F32F97-2375-47CC-86E7-37C50ABAC85F')
                                 delete from infra.tblDevice where DeviceID in( 'CE810507-C614-4C65-9675-569EEFFDBC9F', '94FF1C23-0B7E-41CB-A0F8-058CED0465B3')
                                 delete from infra.tblsite where SiteName = 'rito.site'
                                 delete from infra.tblorg where Name = 'rito'
                                 delete from infra.tblResolvedIdentities where ActualDeviceId = 'CE810507-C614-4C65-9675-569EEFFDBC9F'";
            RunSql(sql);
        }

        private static void RunSql(string sql)
        {
            using (var sqlConnection = new SqlConnection(Configuration.InitConfiguration()["ConnectionString"]))
                sqlConnection.Execute(sql);
        }

        [TestMethod]
        public async Task ResolvedIdentityTests_ShouldResolveAnIdentityAndAddRowToResolvedIdentityTable()
        {
            var infra = new Infrastructure.Identities(Configuration.InitConfiguration()["ConnectionString"]);
            await infra.ResolveIdentity(erroneousDeviceId: new Guid("85E33FB5-C321-4EF2-994C-C835F136BA0C"), actualDeviceId: new Guid("CE810507-C614-4C65-9675-569EEFFDBC9F"));

            // now call GetResolvedIdentity so we can verify it was resolved.
            var resolvedIdentity = await infra.GetResolvedIdentity(new Guid("85E33FB5-C321-4EF2-994C-C835F136BA0C"));
            Assert.AreEqual(actual: resolvedIdentity.ResolvedIdentity.ActualDeviceId, expected: new Guid("CE810507-C614-4C65-9675-569EEFFDBC9F"));
            Assert.AreEqual(actual: resolvedIdentity.ResolvedIdentity.SiteName, expected: "rito.site");
            Assert.IsFalse(resolvedIdentity.ResolvedIdentity.Id == -1);
            Assert.AreEqual(actual: resolvedIdentity.ResolutionStatus, expected: IdentityResolutionState.Resolved);
        }

        [TestMethod]
        public async Task GetResolvedIdenity_ShouldResolveToBlacklisted()
        {
            var infra = new Infrastructure.Identities(Configuration.InitConfiguration()["ConnectionString"]);
            var resolvedIdentity = await infra.GetResolvedIdentity(new Guid("94FF1C23-0B7E-41CB-A0F8-058CED0465B3"));

            Assert.AreEqual(actual: resolvedIdentity.ResolutionStatus, expected: IdentityResolutionState.Blacklisted);
            Assert.AreEqual(actual: resolvedIdentity.ResolvedIdentity, expected: null);
        }

        [TestMethod]
        public async Task GetResolvedIdenity_ShouldResolveToStillPending()
        {
            var infra = new Infrastructure.Identities(Configuration.InitConfiguration()["ConnectionString"]);
            var resolvedIdentity = await infra.GetResolvedIdentity(new Guid("D3F32F97-2375-47CC-86E7-37C50ABAC85F"));

            Assert.AreEqual(actual: resolvedIdentity.ResolutionStatus, expected: IdentityResolutionState.Pending);
            Assert.AreEqual(actual: resolvedIdentity.ResolvedIdentity, expected: null);
        }
    }
}

我不知道为什么这些测试中的任何一个仍处于待定状态,或者这些警告是否是我应该关心的。

这是在 Resharper 测试 运行ner 中,运行ning 在 MS 测试 运行ner 中时没有显示警告(但也许它不显示警告?)

看起来像是 ReSharper 中的错误:

https://resharper-support.jetbrains.com/hc/en-us/community/posts/360000057490-Unit-Test-Sessions-reports-Inconclusive-Test-not-run-

https://youtrack.jetbrains.com/issue/RSRP-469301

将我的解决方案平台从任何 CPU 更改为 x64 为我解决了这个问题。

由于这是第一个答案,所以我在网上搜索时,上面的答案都没有解决,这里是我的解决方案:

更新 Resharper 帮我解决了这个问题。

即使我启用了自动更新,防火墙也阻止我更新。解决方法是从 https://www.jetbrains.com/resharper/download/#section=offline-installer 下载 offline-installer,然后手动更新版本。

版本 > 2020.2 应该没有这些问题。