我对Symfony FormType测试提出了一个问题.http://symfony.com/doc/current/cookbook/form/unit_testing.html
在我的表单类型中,entity类型很常见.使用doctrine实体表单类型测试表单类型是可怕的.
这是我的表格领域.
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('products', 'entity', array(
'class' => 'AcmeDemoBundle:Product',
'label' => 'Product',
'property' => 'name',
'required' => false,
'mapped' => true,
'multiple' => true,
'expanded' => true
));
}
Run Code Online (Sandbox Code Playgroud)
这是该领域的模拟.
private function getEntityTypeMock()
{
$entityRepositoryMock = $this->getMockBuilder('Doctrine\ORM\EntityRepository')
->disableOriginalConstructor()
->getMock()
;
$entityRepositoryMock->expects($this->once())
->method('findAll')
->will($this->returnValue(array()));
$classMetaDataMock = $this->getMockBuilder('Doctrine\ORM\Mapping\ClassMetadata')
->disableOriginalConstructor()
->getMock();
$mockEntityManager = $this->getMockBuilder('Doctrine\ORM\EntityManager')
->disableOriginalConstructor()
->getMock();
$mockEntityManager->expects($this->any())
->method('getClassMetadata')
->will($this->returnValue($classMetaDataMock));
$mockEntityManager->expects($this->once())
->method('getRepository')
->will($this->returnValue($entityRepositoryMock));
$mockRegistry = $this->getMockBuilder('Doctrine\Bundle\DoctrineBundle\Registry')
->disableOriginalConstructor()
->getMock();
$mockRegistry->expects($this->any())
->method('getManagerForClass')
->will($this->returnValue($mockEntityManager));
$mockEntityType = …Run Code Online (Sandbox Code Playgroud) 我\xe2\x80\x99ve以下简化代码。
\nuse async_trait::async_trait; // 0.1.36\nuse std::error::Error;\n\n#[async_trait]\ntrait Metric: Send {\n type Output;\n type Error: Error;\n\n async fn refresh_metric(&mut self) -> Result<Self::Output, Self::Error>;\n}\n\n#[derive(Default)]\nstruct StaticMetric;\n\n#[async_trait]\nimpl Metric for StaticMetric {\n type Output = ();\n type Error = Box<dyn Error>;\n\n async fn refresh_metric(&mut self) -> Result<Self::Output, Self::Error> {\n Ok(())\n }\n}\n\nstruct LocalSystemData<T> {\n inner: T,\n}\n\nimpl<T> LocalSystemData<T>\nwhere\n T: Metric,\n <T as Metric>::Error: \'static,\n{\n fn new(inner: T) -> LocalSystemData<T> {\n LocalSystemData { inner }\n }\n\n async fn refresh_all(&mut self) -> Result<(), Box<dyn Error>> {\n self.inner.refresh_metric().await?;\n Ok(())\n }\n}\n\n#[tokio::main]\nasync …Run Code Online (Sandbox Code Playgroud) 我有一个包含许多转义字符的正"则表达式\。我总体测试了我的正则表达式,您可以找到我的工作现场演示。我将正则表达式转移到 Rust。这是一个不起作用的简化示例:
extern crate regex; // 1.1.0
use regex::Regex;
fn main() {
let re = Regex::new(r#"123 \\""(\w+)"#).unwrap();
let test = "123 \"PROPFIND\"";
for cap in re.captures_iter(test) {
println!("{}", &cap[1]);
}
}
Run Code Online (Sandbox Code Playgroud)
我的示例的输出是空的,但我期望PROPFIND
正则表达式文档向我指出了原始字符串文档。我尝试了不同的逃避技术,但不知道我哪里搞砸了。
我有一个trait Surface: 'static我想为 a 实现的struct Obj<'a>。该特征需要是'static因为我想将类型的对象存储Surface在 a 中Vec<Box<Surface>>。
第一步我尝试了这个。
impl<'a> Surface for Obj<'a> {}
Run Code Online (Sandbox Code Playgroud)
这不会起作用,因为'static和之间的生命周期不匹配'a。换句话说:可以比现在Surface活得更久。我改变了我的实现如下。ObjSurface'static
impl<'a> Surface for Obj<'a> where 'a: 'static {}
Run Code Online (Sandbox Code Playgroud)
据我正确理解文档,我正在做的是,'a可以比'static. 我想要这个吗?
如果我转移 的所有权Obj<'a>,编译器会告诉我内部的可变引用Obj不会存在足够长的时间,并且仍然是借用的。
这是一个简短的例子。
trait Surface: 'static {}
struct Manager {
storage: Vec<Box<Surface>>,
}
impl Manager {
fn add(&mut self, surface: impl Surface) {
self.storage.push(Box::new(surface));
}
}
struct SomeOtherStruct …Run Code Online (Sandbox Code Playgroud) 我有一个c ++函数重载的问题.这是一个示例类.
class test
{
public:
const char* data() const
{
std::cout << "const char* data() const" << std::endl;
return data_;
}
char* data()
{
std::cout << "char* data()" << std::endl;
return data_;
}
private:
char data_[512];
};
Run Code Online (Sandbox Code Playgroud)
在我的例子中,我有两个函数调用.
test t;
const char *t1 = t.data();
char* t2 = t.data();
Run Code Online (Sandbox Code Playgroud)
我的输出是char* data()两次.有人能解释我发生了什么事吗?为什么const char* data() const从未被召唤过?
感谢帮助.
我正在使用 Tokio 和async/.await来创建一个 UDP 服务器,我可以在其中以异步方式接收和发送数据。
在SendHalf我的UDP套接字的跨多个任务共享。为此,我正在使用Arc<Mutex<SendHalf>>. 这就是为什么Arc<Mutex<_>>存在。
use tokio::net::UdpSocket;
use tokio::net::udp::SendHalf;
use tokio::sync::mpsc;
use std::sync::{Arc, Mutex};
use std::net::SocketAddr;
struct Packet {
sender: Arc<Mutex<SendHalf>>,
buf: [u8; 512],
addr: SocketAddr,
}
#[tokio::main]
async fn main() {
let server = UdpSocket::bind(("0.0.0.0", 44667)).await.unwrap();
let (mut server_rx, mut server_tx) = server.split();
let sender = Arc::new(Mutex::new(server_tx));
let (mut tx, mut rx) = mpsc::channel(100);
tokio::spawn(async move {
loop {
let mut buffer = [0; 512];
let (_, …Run Code Online (Sandbox Code Playgroud) 我有一个问题要理解两种不同的字符串比较方法.给出以下函数来比较两个字符串.此功能在Symfony-Framework安全组件中用于比较用户登录过程中的密码.
/**
* Compares two strings.
*
* This method implements a constant-time algorithm to compare strings.
*
* @param string $knownString The string of known length to compare against
* @param string $userInput The string that the user can control
*
* @return Boolean true if the two strings are the same, false otherwise
*/
function equals($knownString, $userInput)
{
// Prevent issues if string length is 0
$knownString .= chr(0);
$userInput .= chr(0);
$knownLen = strlen($knownString);
$userLen = strlen($userInput); …Run Code Online (Sandbox Code Playgroud) rust ×4
php ×2
algorithm ×1
async-await ×1
c++ ×1
comparison ×1
escaping ×1
forms ×1
lifetime ×1
regex ×1
rust-tokio ×1
symfony ×1
traits ×1
udp ×1
unit-testing ×1