背景:
我们有一个客户端(Javascript)和服务器端(C#)的项目.需要在两侧运行计算逻辑,因此它用Javascript和C#编写.我们为C#版本类进行了许多单元测试.我们的目标是分享C#和Javascript实现的单元测试.
现在的情况:
我们能够在嵌入式JS引擎(Microsoft ClearScript)中运行Javascript代码.代码如下所示:
public decimal Calulate(decimal x, decimal y)
{
string script = @"
var calc = new Com.Example.FormCalculater();
var result = calc.Calculate({0}, {1});";
this.ScriptEngine.Evaluate(string.Format(script, x, y));
var result = this.ScriptEngine.Evaluate("result");
return Convert.ToDecimal(result);
}
Run Code Online (Sandbox Code Playgroud)
但是,编写这样的类需要付出很多努力.我们正在寻找一种在运行时动态创建这些类的方法.
例如,我们有一个C#类(在JS文件中也有JS版本):
public class Calculator {
public decimal Add(decimal x, decimal y){ ... }
public decimal Substract(decimal x, decimal y){ ... }
public decimal Multiply(decimal x, decimal y){ ... }
public decimal Divide(decimal x, decimal y){ ... }
}
Run Code Online (Sandbox Code Playgroud)
我们想要创建一个具有相同方法的动态类,但调用脚本引擎来调用相关的JS代码.
有可能吗?
假设我有一个如下所示的类,我想对'DoCalculate(arg1,arg2)'函数进行单元测试:
public class Calc
{
public int DoCalculate(int arg1, int arg2)
{
int num1 = this.GetNum1(); // member function
int num2 = this.GetNum2(); // member function
if( this.flag1) // member variable
{
return num1*num2+arg1-arg2;
}
else
{
int num3 = this.GetNum3(); // member function
return num3 + arg2;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在此函数中,它从其他成员函数和成员变量获取输入.
如何对这个功能进行单元测试?或者如何重构以使其可单元测试?
这是 C# 代码:
public class Calc1 : ICalculator
{
public int Calculate(int x, int y)
{
return x + y;
}
}
Run Code Online (Sandbox Code Playgroud)
这是 IL:
.method public hidebysig newslot virtual final
instance int32 Calculate(int32 x,
int32 y) cil managed
{
// Code size 9 (0x9)
.maxstack 2
.locals init ([0] int32 CS$1$0000)
IL_0000: nop
IL_0001: ldarg.1
IL_0002: ldarg.2
IL_0003: add
IL_0004: stloc.0
IL_0005: br.s IL_0007
IL_0007: ldloc.0
IL_0008: ret
} // end of method Calc1::Calculate
Run Code Online (Sandbox Code Playgroud)
如何将上面的 IL 转换为 Emit 语句?这是我逐行翻译的尝试,但得到了“System.InvalidProgramException”。
string …Run Code Online (Sandbox Code Playgroud) 假设有一个shared_ptr:
std::shared_ptr<MyClass> myPtr = std::make_shared(new MyClass());
Run Code Online (Sandbox Code Playgroud)
在工作线程中:
myPtr = nullptr;
Run Code Online (Sandbox Code Playgroud)
在主线程中:
if( myPtr != nullptr )
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
上面的代码线程安全吗?还是主线程可以立即看到新值?
我们有一个用 C# 目标框架 2.0 编写的旧库。最近我们将在现代 .net core 项目中使用它并打算使用async/await. 然而,旧图书馆有很多lock街区。
我们计划添加新async方法来实现相同的逻辑。
例如,
旧代码
void GetOrder()
{
// ...
lock(_lock)
{
//...
}
}
Run Code Online (Sandbox Code Playgroud)
预期结果
async Task AsyncGetOrder()
{
// ...
await DoSomethingWithLock()
}
Run Code Online (Sandbox Code Playgroud)
请给我一些关于如何翻译lock成 的建议async/await。
如何缩短声明:
auto ptr = std::shared_ptr<CPoint>(new CPoint(x, y));
Run Code Online (Sandbox Code Playgroud)
请注意CPoint出现两次.可以缩短吗?
喜欢:
auto ptr = XXXX<CPoint>(x, y);
Run Code Online (Sandbox Code Playgroud)
XXXX是一个宏或任何东西.它应该适用于任何带有任何参数的构造函数.
auto ptrA = XXXX<ClassA>(); // a shared_ptr to new ClassA()
auto ptrB = XXXX<ClassB>(a, b, c); // a shared_ptr to new ClassB(a, b, c)
Run Code Online (Sandbox Code Playgroud) 数据库是MySQL.代码应如下所示:
public interface UserMapper {
@Select("....")
boolean checkUserExists(@Param("email") String email);
}
Run Code Online (Sandbox Code Playgroud)
是否可能,以及如何编写SELECT SQL?(可以存在吗?)
我对AngularJS UI中的ui-mask模块很新.当我使用它时,我注意到如果用户输入无效格式,并将焦点移动到另一个控件,则输入将被清除.
如何在焦点丢失时使ui-mask保留无效输入?我想向用户显示错误工具提示,例如"此字段无效",而不是清除他们的输入.
===============================
更新:
感谢majorlazer.
的?标记有效,例如,当掩码为?99/9999时,输入将不会被清除.
但是占位符存在一个小问题.我的面具是?99/9999,我的占位符是
'__/____' (2 underscores and a slash and 4 underscores)
Run Code Online (Sandbox Code Playgroud)
但是当输入没有焦点时,它会显示出来
'_//____' (1 underscore and two slashes and 4 underscores)
Run Code Online (Sandbox Code Playgroud)
你有什么主意吗?
当我这样使用时std::thread:
func()
{
std::thread(std::bind(&foo, this));
}
Run Code Online (Sandbox Code Playgroud)
线程对象在堆栈中分配,并在func()返回时被销毁.所以我尝试使用它:
func()
{
std::thread* threadPtr = new std::thread(std::bind(&foo, this));
}
Run Code Online (Sandbox Code Playgroud)
我应该在哪儿delete threadPtr?我怎样才能创建最初暂停的线程?
c# ×3
c++ ×2
c++11 ×2
shared-ptr ×2
angular-ui ×1
angularjs ×1
async-await ×1
clearscript ×1
emit ×1
javascript ×1
mybatis ×1
mysql ×1
stdthread ×1
unit-testing ×1