小编sco*_*192的帖子

使用ItExpr.IsNull <TValue>而不是null参数值,因为它阻止正确的方法查找

我正在尝试编写一个单元测试,我需要设置一个受保护的方法.我正在使用Moq进行此设置.

_innerHandler.Protected()
             .Setup<Task<HttpResponseMessage>>("SendAsync", It.IsAny<HttpRequestMessage>(), It.IsAny<CancellationToken>())
             .ReturnsAsync(responseMessage);
Run Code Online (Sandbox Code Playgroud)

当该行执行时,它会抛出以下异常:

System.ArgumentException:使用ItExpr.IsNull<TValue>而不是null参数值,因为它阻止正确的方法查找.

当我将其更改为使用时ItExpr.IsNull<TValue>,它确实允许测试执行.但是,它当然缺少我想配置的设置.

为了使用It.IsAny<TValue>?设置受保护的方法,我需要做什么?

c# unit-testing moq

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

路径上的约束条目'httpMethod'必须具有字符串值

我有一个asp.net Web API项目,在我的WebApiConfig文件中,我定义了以下路由:

config.Routes.MapHttpRoute(
    name: "Web API Get",
    routeTemplate: "api/{controller}",
    defaults: new { action = "Get" },
    constraints: new { httpMethod = new HttpMethodConstraint("GET") }
    );
Run Code Online (Sandbox Code Playgroud)

出于集成测试的目的,我想向a发出请求以HttpSelfHostServer验证我们是否从api调用中收回了正确的数据.我正在做HttpRequestMessage如下:

var httpMethod = new HttpMethod("GET");
var request = new HttpRequestMessage(httpMethod, "http://localhost:XXXX/api/User/");
var results = _client.SendAsync(request).Result;
Run Code Online (Sandbox Code Playgroud)

我希望这会调用UserController上的Get方法,然后返回该方法中定义的结果.但是,我得到以下异常:

System.InvalidOperationException:路由模板'api/{controller}'的路由上的约束条目'httpMethod'必须具有字符串值或者是实现'IHttpRouteConstraint'的类型

http://localhost:XXXX/api/User/当我在浏览器中使用它时,同样的url()可以正常工作,所以我很确定问题必须与我HttpSelfHostServer通过发送请求的方式相同HttpClient.我尝试过使用HttpMethod.Get常量,但这也引发了同样的错误.

有谁知道如何解决这个问题?

c# asp.net httpserver asp.net-web-api asp.net-web-api-routing

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

使用sqlcmd":r"将XML文件的内容转换为变量

我有一个XML文件,我想用它来将静态数据加载到我的数据库中.最好,我想使用sqlcmd":r"进行文本替换,以便在我的sql脚本中将xml视为硬编码数据.

使用硬编码数据,我的脚本可以工作

--Working Code
DECLARE @XML XML
SET @XML = '
<clients>
    <client>
        <ClientNumber>ClientA</ClientNumber>
    </client>
    <client>
        <ClientNumber>ClientB</ClientNumber>
    </client>
</clients>
'
Run Code Online (Sandbox Code Playgroud)

我想做的是这样的事情:

DECLARE @XML XML
SET @XML = '
:r .\ClientData.xml
'
Run Code Online (Sandbox Code Playgroud)

ClientData.xml的内容与先前硬编码的xml文本相同.问题是sqlcmd解析器没有在测试替换上获取,而只是将值':r.\ ClientData.xml'放在我的xml变量中.

如果我尝试删除抽搐,我会收到以下错误:

Incorrect syntax near '<'.
Run Code Online (Sandbox Code Playgroud)

有什么办法可以强制sqlcmd在内部抽搐时执行,所以文本替换正确吗?

xml t-sql variables syntax sqlcmd

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

嵌套选择中分区依据返回奇怪的结果

我在SQLServer 2008中遇到了一个我不理解的奇怪行为。我想快速地将唯一的客户与唯一的付款配对。

使用此查询,我得到了期望的结果。每个CustomerId与不同的PaymentId配对。

SELECT CustomerId, PaymentId, RowNumber1, RowNumber2
FROM (
    SELECT
        c.Id as CustomerId,
        p.Id as PaymentId,
        ROW_NUMBER() OVER (PARTITION BY p.Id ORDER BY p.Id) AS RowNumber1,
        ROW_NUMBER() OVER (PARTITION BY c.Id ORDER BY c.Id) AS RowNumber2
    FROM Customer as c
    CROSS JOIN Payment as p
) AS INNERSELECT WHERE RowNumber2 = 1

+------------+-----------+------------+------------+
| CustomerId | PaymentId | RowNumber1 | RowNumber2 |
+------------+-----------+------------+------------+
|          4 |         1 |          1 |          1 |
|          5 |         2 |          2 | …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

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