我正在尝试编写一个单元测试,我需要设置一个受保护的方法.我正在使用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>
?设置受保护的方法,我需要做什么?
我有一个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
我有一个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在内部抽搐时执行,所以文本替换正确吗?
我在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) c# ×2
t-sql ×2
asp.net ×1
httpserver ×1
moq ×1
sql ×1
sql-server ×1
sqlcmd ×1
syntax ×1
unit-testing ×1
variables ×1
xml ×1