鉴于以下内容:
public class SomePoco {
public int IntValue { get; }
}
Run Code Online (Sandbox Code Playgroud)
和
CREATE TABLE SomePocoStorage (IntValue INT NOT NULL)
Run Code Online (Sandbox Code Playgroud)
和
INSERT SomePocoStorage VALUES (1), (274)
Run Code Online (Sandbox Code Playgroud)
如果我打电话
connection.Query<SomePoco>("SELECT * FROM SomePocoStorage")
Run Code Online (Sandbox Code Playgroud)
Dapper是否处理IntValue在返回的SomePoco实例上填充字段?
我正在学习 Pythonic 测试开发,偶然发现了这个看似违反直觉的问题。当我修补与被测代码在同一文件中定义的函数时,该函数patch可以正常工作。但是,当我使用import来自不同文件的函数时,patch正确工作的唯一方法是创建import本地函数,而不是在文件顶部定义它。
最小复制:
a/b.py:
from x.y import z
def c():
print("In a.b.c")
class D:
def do_stuff_with_a_b_c(self):
print("In do_stuff_with_a_b_c")
c()
def do_stuff_with_x_y_z(self):
from x.y import z
print("In do_stuff_with_x_y_z")
z()
Run Code Online (Sandbox Code Playgroud)
x/y.py:
def z():
print("In x.y.z")
Run Code Online (Sandbox Code Playgroud)
测试/d_tests.py:
import inspect
import unittest
from unittest.mock import patch
from x import y
from a.b import D
class DTests(unittest.TestCase):
def test_do_stuff_with_a_b_c(self):
print(f"In {inspect.stack()[0][3]}")
D().do_stuff_with_a_b_c()
@patch("a.b.c")
def test_do_stuff_with_patched_a_b_c(self, a_b_c_method):
print(f"In {inspect.stack()[0][3]}")
D().do_stuff_with_a_b_c()
def test_do_stuff_with_x_y_z(self):
print(f"In {inspect.stack()[0][3]}")
D().do_stuff_with_x_y_z()
@patch("x.y.z")
def …Run Code Online (Sandbox Code Playgroud) 我在Java中有以下示例类:
public class A { }
public class Super {
protected Super() { }
public Super(A a) { }
}
public class Sub extends Super { }
public class Consumer {
public Consumer() {
Sub sub = new Sub(new A()); //compiler error
}
}
Run Code Online (Sandbox Code Playgroud)
编译器错误表明参数不能应用于Sub中的默认构造函数,这是完全可以理解的.
我很好奇的是这个决定背后的理由.Java生成默认的空构造函数Sub; 为什么不能在这种情况下在幕后调用呢?这主要是理智的手持,还是有技术原因?
编辑
我知道的是这是一个语言的限制.我很好奇为什么它是一种语言限制.
编辑2
看起来,通常情况下,我太过接近我实际工作的代码,看看大局.我在下面的答案中发布了一个反例,说明了为什么这是BadThing®.
我正准备开始在应用程序中开始性能,最终将分布式运行,但目前正处于[绿地]开发阶段.
我希望能够在没有选择或提交到特定库的情况下引入缓存,所以我想知道是否存在一个已经存在的缓存外观库(类似于slf4j用于日志记录),这将允许我在以后的日子.
我一直最讨厌 MS SQL Server 中的一件事就是安全性的工作方式。如果你有趣地看待服务器,安全上下文会不断切换,而且通常很难(无论如何对我来说)预测或调试。
在今天处理一个问题时,我想,“我希望我可以在代码中添加一行,以显示 SQL Server 在代码运行时使用的安全上下文。” 存在这样的命令吗?例如,SELECT security_context()
更清楚一点...如果我处于存储过程中并且因此受到 SP 所有者的安全上下文的约束,那么我希望看到这一点。如果我在由 sp_executesql 调用的代码中,并且它导致安全性处于 SQL Server 服务帐户的上下文中,那么我希望看到这一点。
至少这样我也许能够弄清楚为什么 SQL Server 认为我不应该访问某些内容。
谢谢!
例子
-- Set up
CREATE USER Test_User WITHOUT LOGIN
CREATE TABLE Test_Security_Context (my_id INT)
INSERT INTO Test_Security_Context VALUES (1)
DENY SELECT ON Test_Security_Context TO Test_User
GO
CREATE PROCEDURE Test_Security_Context_SP
AS
SELECT SUSER_SNAME()
SELECT * FROM Test_Security_Context -- This will return ok
EXEC('SELECT SUSER_SNAME(); SELECT * FROM Test_Security_Context') -- SUSER_SNAME() will match above but select fails …Run Code Online (Sandbox Code Playgroud) SQL Server 2008 是否提供任何用于表值参数的预定义表类型?
例如,如果我只想将整数列表作为表传入,并从我传入的其他参数中派生出必要的上下文,是否有适合的类型,还是必须创建它?
我正在尝试模拟映射接口IMapper:
public interface IMapper<TFoo, TBar> {
TBar Map(TFoo foo);
TFoo Map(TBar bar);
}
Run Code Online (Sandbox Code Playgroud)
在我的测试中,我将模拟映射器设置为期望每个都被调用(围绕NHibernate update操作):
//...
_mapperMock.Setup(m => m.Map(fooMock.Object)).Returns(barMock.Object);
_mapperMock.Setup(m => m.Map(barMock.Object)).Returns(fooMock.Object);
//...
Run Code Online (Sandbox Code Playgroud)
但是,在进行第二次Map调用时,映射器模拟程序将抛出异常,因为它只希望进行一次调用。
看着在运行时安装过程中的mapper模拟,我可以看到Map(TFoo foo)注册了过载,然后在设置Map(TBar bar)过载时看到了它的替换。
Moq处理设置的方式是否有问题,或者在这种情况下需要使用其他语法吗?
编辑 这是来自测试构造函数的实际实例化代码:
public class TestClass {
private readonly MockRepository _repository = new MockRepository(MockBehavior.Strict);
public TestClass() {
//...
_mapperMock = _repository.Create
<IMapper<RequestData.Foo, ResponseData.Bar>>();
//...
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2
这是一个完整的失败测试用例:
public interface IMapper<TFoo, TBar> {
TFoo Map(TBar bar);
TBar Map(TFoo foo);
}
public class Foo { …Run Code Online (Sandbox Code Playgroud) 我知道可以通过创建INI文件在程序集或可执行文件级别禁用.Net的JIT优化。
是否可以对流程中的所有程序集或可执行文件执行相同的操作?
我的特定用例是在IIS Express中运行的ASP.Net MVC应用程序中调试异常处理-我已经System.Web.Mvc.ini设置好文件,并且在为每个其他DLL写入文件之前,我认为我可能会输入文件,并且可能可能没有从GAC加载,我想问一问是否可以使用通用方法。
保留的问题 - 请参阅底部的编辑
我正在开发一个小型函数库,基本上是通过隐藏基本的圈复杂度来提供一些可读性.调用提供程序(调用Select<T>帮助程序工厂Select),用法类似于
public Guid? GetPropertyId(...)
{
return Select
.Either(TryToGetTheId(...))
.Or(TrySomethingElseToGetTheId(...))
.Or(IGuessWeCanTryThisTooIfWeReallyHaveTo(...))
//etc.
;
}
Run Code Online (Sandbox Code Playgroud)
和库会照顾短路,等我还添加了从隐式转换Select<T>来T的,所以我可以写
public Guid GetPropertyId(...)
{
ServiceResult result = Select
.Either(TryToGetTheId(...))
.Or(TrySomethingElseToGetTheId(...));
return result.Id;
}
Run Code Online (Sandbox Code Playgroud)
我真正希望能够做的是在没有赋值的情况下隐式转换为T:
public Guid GetPropertyId(...)
{
return
//This is the part that I want to be implicitly cast to a ServiceResult
Select
.Either(TryToGetTheId(...))
.Or(TrySomethingElseToGetTheId(...))
//Then I want to access this property on the result of the cast
.Id;
}
Run Code Online (Sandbox Code Playgroud)
但是,指定的语法不起作用 - 我必须将其分配给变量,或者显式地转换它.有没有办法获得内联隐式转换?
编辑 …
我正在构建一个用户管理系统,其中包含一个向其发送命令的域主机。record由于init-only 属性和生成的辅助方法,这些命令都是s 。但是,我很快就遇到了这种方法的问题,例如LoginUserCommand.
command.ToString() 返回如下内容(添加格式):
LoginUserCommand {
Identity = 10000000-1111-2222-3333-444444444444,
CorrelationId = 20000000-1111-2222-3333-444444444444,
Timestamp = 2013-07-26T16:45:20Z,
IssuingUserId = 30000000-1111-2222-3333-444444444444,
EntityId = a80c081c-cf91-4304-9baa-20fb20c8d9f7,
IPAddress = 127.0.0.1,
Password = ThisIsAPr0blem
}
Run Code Online (Sandbox Code Playgroud)
显然,我可以通过例如覆盖重要ToString()的类来解决这个问题。天真地,我可能会做类似的事情
public override string ToString()
{
return base.ToString()
.Replace(Password, "********");
}
Run Code Online (Sandbox Code Playgroud)
但我想知道我是否忽略了一些让生成的ToString()方法屏蔽Password属性值的内置方法。
c# ×4
java ×2
c#-6.0 ×1
c#-9.0 ×1
caching ×1
casting ×1
constructor ×1
dapper ×1
facade ×1
implicit ×1
jit ×1
moq ×1
optimization ×1
overloading ×1
pytest ×1
python ×1
security ×1
sql-server ×1