我正在尝试使用Moq模拟以下方法签名的回调:
ResponseHeader AddIncentives(
Hs_transRow[] data,
out ResponseBody responseBody);
Run Code Online (Sandbox Code Playgroud)
我希望我的回调使用传入的数据。但是,我遇到的问题是因为第二个参数是out参数。我可以毫无问题地设置和返回数据,但是回调是一个问题。
这是我当前的设置:
var addIncentiveResponseBody = new ResponseBody();
mockCoinsService
.Setup(service => service.AddIncentives(It.IsAny<Hs_transRow[]>(), out addIncentiveResponseBody))
.Callback((Hs_transRow[] data, ResponseBody body) =>
{
//I want to use the data variable here
})
.Returns(() => new ResponseHeader
{
action = ResponseHeaderAction.RESPONSE,
});
Run Code Online (Sandbox Code Playgroud)
当我在单元测试中运行以下代码时,出现错误:
无效的回调。在具有参数(Hs_transRow [],ResponseBody&)的方法上进行的设置无法调用具有参数(Hs_transRow [],ResponseBody)的回调。
我可以看到&符之间的差异,我认为这是因为该参数应该是out参数。但是,如果将out关键字添加到回调中(并在回调中为其分配值),则会收到生成时间错误:
代表“动作”不带两个参数。
Moq是否无法处理具有out参数的方法的回调,还是我做错了什么?
[编辑]毫无疑问,我不是在问如何设置out参数的值。这行已经完成了:
var addIncentiveResponseBody = new ResponseBody();
Run Code Online (Sandbox Code Playgroud) 我试图从官方 TS 文档中理解混音。
https://www.typescriptlang.org/docs/handbook/mixins.html
我在这里设立了一个游乐场。
我的问题是:我如何定义jump和duck来操作Sprite中定义的x和y属性?
即在这个例子中,我希望使用jump()和duck()来操作Sprite类中的x和y。那可能吗?将 x 和 y 属性添加到可跳和可鸭子中似乎很麻烦且重复。
一般来说,如果没有混合类之间属性的交叉操作,我很难看到 TS mixin 的真实用例。
代码是:
(() => {
// This can live anywhere in your codebase:
function applyMixins(derivedCtor: any, constructors: any[]) {
constructors.forEach((baseCtor) => {
Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
Object.defineProperty(
derivedCtor.prototype,
name,
Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||
Object.create(null)
);
});
});
}
// Each mixin is a traditional ES class
class Jumpable {
jump() {
console.log("jump");
}
}
class Duckable {
duck() {
console.log("duck");
}
}
// Including the base
class …Run Code Online (Sandbox Code Playgroud) 我正在使用 NET 6 在 asp.net mvc 中开发一个网站,当我部署时,我找不到 cshtml 页面,而是找到很多文件夹、dll 和 .exe。
问题是,每次修改一个页面时,我都需要更新所有网站。
有没有办法只将修改后的页面cshtml上线而不部署整个网站?
我有以下代码:
Observable.from(modifiedNodes)
.concatMap(node => {
return this.Model.setData(node);
})
.subscribe(() => {
NodeSaved++;
}
Run Code Online (Sandbox Code Playgroud)
如果setData为任何中间节点抛出错误,则不会恢复下一个节点序列。我们如何修改它,以便即使一个节点出现错误,也将执行下一个节点序列?我读过,onErrorResumeNext但我不知道如何在这里使用它。
方法签名setData如下:
public setData(node: INode): Observable<Object>{}
Run Code Online (Sandbox Code Playgroud) 我使用 angular CLI (v6.1.4) 通过运行在我的 components 文件夹中生成了一个组件,ng g c components/foo然后运行ng test. 新组件的测试失败并出现以下错误:
async() 测试助手需要区域但找不到。请确保您的环境包括 zone.js/dist/zone.js 抛出
错误:非法状态:无法加载指令 FooComponent 的摘要。
奇怪的是,如果我运行ng g c foo(即它不在 components 文件夹中生成),则测试通过。我的测试都适用于其他文件夹,但这是我的 components 文件夹中的第一个测试(也是一个组件的第一个测试)。其他测试都不是异步的。
我是新手,ng test所以我可能会遗漏一些非常明显的东西。我没想到需要设置任何东西zone.js来运行默认测试。我应该在哪里配置它?还是我在这里遗漏了其他东西,也许是我的components文件夹特有的东西?
我在 Angular 组件上有一个点击事件:
import { Component } from "@angular/core";
@Component({
template: `
<hello (click)="onClick($event)"></hello>
`
})
export class AppComponent {
onClick(e) {
alert("Click on TAG: " + e.target.tagName);
}
}
Run Code Online (Sandbox Code Playgroud)
在线查看演示:https : //stackblitz.com/edit/angular-ivy-zxmsnc?file=src%2Fapp%2Fapp.component.ts
为什么是event.target组件的内部元素而不是组件本身?
我正在按以下方式构建连接字符串(使用适当的连接参数值)。
var builder = new SqlConnectionStringBuilder
{
PersistSecurityInfo = false,
InitialCatalog = "mydatabase",
UserID = "myuser",
Password = "mydatabase",
DataSource = "myserver"
};
var connectionString = builder.ConnectionString;
using (var db = Helper.MakeContext(connectionString)) {
var carrier = db.Carriers.FirstOrDefault(); // fails here with error
Console.WriteLine(carrier.Carrier);
}
Run Code Online (Sandbox Code Playgroud)
Helper 在不同的项目中
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using ApiForVivtrack3.Entities;
public static class Helper
{
//public string ConnectionString { get; set; }
public static ApiDbContext MakeContext(string connectionString)
{
var db = new …Run Code Online (Sandbox Code Playgroud) 我想用枚举值填充 WinForms Combobox,但是当我尝试使用 Linq 进行此操作时,Combobox 中没有添加任何项目。但是,foreach 变体工作得很好。
我的林克:
Enum.GetNames(typeof(AgeCategory))
.Select(x => cbCategory.Items.Add(x));
Run Code Online (Sandbox Code Playgroud)
我的foreach:
foreach (var category in Enum.GetNames(typeof(AgeCategory)))
{
cbCategory.Items.Add(category);
}
Run Code Online (Sandbox Code Playgroud)
另外,如果您知道更好的方法来做到这一点,我愿意接受不同的解决方案。
是否可以通过编程方式清除ng-select下拉列表的选择?我想要单击清除图标的等效行为,但是是以编程方式触发的。
我期待有一种clear()方法或类似的方法,但是文档化的API在这些方面没有任何内容。
这是我的下拉代码:
<ng-select class="ng-select-wrap"
[searchFn]="multiTermSearch"
[items]="calculationOptions"
placeholder="Please select..."
name="calculation"
#calculationValue="ngModel"
[(ngModel)]="selectedCalculation">
</ng-select>
Run Code Online (Sandbox Code Playgroud) angular ×3
c# ×2
typescript ×2
.net-6.0 ×1
angular-cli ×1
callback ×1
concatmap ×1
foreach ×1
javascript ×1
linq ×1
mixins ×1
moq ×1
observable ×1
out ×1
rxjs ×1
unit-testing ×1
zonejs ×1