我的代码正在使用实现这样的接口的组件
public interface IFoo
{
void DoSomething(string p1);
void DoSomething(string p1, Action<string> p2);
}
截至目前,我正在使用第一种方法,但我打算转到第二种方法,我希望保持尽可能高的覆盖率。
只是我真的不知道如何检查委托,甚至只是设置Moq来模拟界面。
我试过
mock.Setup(p => p.DoSomething(It.IsAny<string>(), It.IsAny<Delegate>()));
mock.Setup(p => p.DoSomething(It.IsAny<string>(), It.IsAny<Action<string>>()));
但不会让我建立。有什么建议吗?
答案 0 :(得分:3)
该行:
from lxml import etree
import re
xml = '''<?xml version="1.0"?>
<data>
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="443"
redirectPort="443"
executor="tomcatThreadPool"
disableUploadTimeout="true"
SSLEnabled="true"
scheme="https"
secure="true"
clientAuth="false"
sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2"
keystoreType="JKS"
keystoreFile="tomcat.keystore"
keystorePass="XXXXX"
server="XXXX"
ciphers="TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
TLS_DH_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
TLS_DH_DSS_WITH_AES_128_CBC_SHA,
TLS_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA,
TLS_RSA_WITH_3DES_EDE_CBC_SHA,
TLS_RSA_WITH_RC4_128_SHA"
address="192.168.10.6"></Connector></data>'''
tree = etree.fromstring(xml)
root = tree.getroottree().getroot()
for connector in root.findall('Connector'):
port = connector.get('port')
ip = connector.get('address')
#change this to port/ip you want to remove
if port != '443' or ip != '192.168.10.6':
#removes child connector
connector.getparent().remove(connector)
continue
#here we use list comprehension to remove any cipher with "RC4"
ciphers = ','.join([x for x in re.split(r',\s*', connector.get('ciphers')) if 'RC4' not in x])
#set the modified cipher back
connector.set('ciphers', ciphers)
print etree.tostring(root, pretty_print=True)
必须不编译,因为mock.Setup(p => p.DoSomething(It.IsAny<string>(), It.IsAny<Delegate>()));
需要DoSomething
,Action<string>
Delegate
。你的另一行:
Action<string>
有效并且是正确的!
只有在mock.Setup(p => p.DoSomething(It.IsAny<string>(), It.IsAny<Action<string>>()));
满足某些条件时才能进行设置,例如:
p2
或者您可以使用mock.Setup(p => p.DoSomething(It.IsAny<string>(),
It.Is((Action<string> p2) => p2 != null && p2.Target is SomeClass)
));
来检查内容:
CallBack
当然,您可以检查mock.Setup(p => p.DoSomething(It.IsAny<string>(), It.IsAny<Action<string>>()))
.CallBack((string p1, Action<string> p2) =>
{
// your code (for example Asserts) here,
// use p2
});
的数量是有限制的,但您可以看到它是否为非空,请查看其Action<string>
是否为非null或具有特定类型或等于给定实例,您可以看到p2.Target
是否是已知(命名)方法,或者如果您期望所谓的多播委托,则可以使用p2.Method
。