问题列表 - 第42158页

Rspec,stub方法并返回一个预定义的值

我想测试这个destroy动作:

  def destroy
   @comment = Comment.find(params[:id])
   @comment_id = @comment.id
   if @comment.delete_permission(current_user.id)
     @remove_comment = true
     @comment.destroy
   else
     @remove_comment = false
     head :forbidden
   end
 end
Run Code Online (Sandbox Code Playgroud)

我的规格如下:

    describe "DELETE 'destroy'" do
      describe 'via ajx' do
        it "should be successful if permission true" do
          comment = Comment.stub(:find).with(37).and_return @comment
          comment.should_receive(:delete_permission).with(@user.id).and_return true
          comment.should_receive(:destroy)

          delete 'destroy', :id => 37
        end
      end
    end
Run Code Online (Sandbox Code Playgroud)

我总是得到:

comment.should_receive....
expected: 1 time
received: 0 times
Run Code Online (Sandbox Code Playgroud)

原因:从不调用delete_permission?你对如何测试它有什么建议吗?

rspec mocking

3
推荐指数
1
解决办法
7265
查看次数

Rails引擎中的迁移?

我有多个rails应用程序与同一个后端交谈,我希望他们分享一些迁移.
我设置了一个rails引擎(带有enginex),我可以共享任何东西(控制器,视图,模型......)但没有迁移.我做不到!

我尝试创建一个文件db/migrate/my_migration.rb,但在我的主应用程序中,如果我这样做:

  rake db:migrate
Run Code Online (Sandbox Code Playgroud)

它不加载它们.

经过一番Google上搜寻它似乎有一些最近的工作在这,似乎已经合并轨主.我用rails 3.0.3你有没有办法让这个工作?

谢谢 !

ruby-on-rails rails-engines ruby-on-rails-3

37
推荐指数
6
解决办法
2万
查看次数

构造多边形联合多边形

假设我有很多多边形,构造多边形的最佳算法是什么 - 可能是所有这些多边形的并集孔?

为了我的目的,你可以想象每个多边形作为一个拼图块,当你完成它们你会得到一个很好的图片.但问题是,缺少一小部分(比如<5%)的拼图,你仍然要求尽可能完整地形成一幅画面; 这是多边形(或多边形) - 可能有孔 - 我想形成.

我天真的方法是取两个多边形,合并它们,然后取另一个多边形,将它与两个多边形的并集联合起来,然后重复这个过程,直到每个单元都结合在一起.然后我将遍历联合多边形列表并检查是否仍然可以组合一些多边形,并且我将重复此过程,直到获得满意的结果.

但这似乎是一种非常天真的方法.我只是想知道还有其他更好的算法吗?

c# algorithm geometry computational-geometry

10
推荐指数
2
解决办法
5294
查看次数

是否有任何正则表达式模式来匹配 Excel 工作表名称和地址(即单元格引用)

一些有效的工作表名称如下所示

t'#3cfbsdjfdsjb''''''''^^^^^^&&'!$C$8:$N$23   

1'!$E$13:$H$19    

!'!$B$7:$E$16    

@@@@@@@'!$B$7:$K$21

!$'!$B$12:$M$17
Run Code Online (Sandbox Code Playgroud)

我在用

string pattern =@"[^<]+?\!\$[A-Z]+\$[0-9]+"

Regex r = new Regex(Constants.CELL_REFERENCE_PATTERN);
            Match m = r.Match(selectedVal);
            if (m.Success) return true;
            else return false;
Run Code Online (Sandbox Code Playgroud)

但它失败了

“t'#3cfbsdjfdsjb''''''''^^^^^^&&'!$C$8:$N$23,p,mv”或“sheet1!$A1”。

提前致谢

regex c#-3.0

2
推荐指数
1
解决办法
3996
查看次数

MVC模式中的业务逻辑在哪里?

我使用Zend框架和Doctrine.在许多项目中,业务逻辑内置于控制器中.这种方法对我来说似乎不对.

我见过的最好的设置是使用服务层,这就是编写业务逻辑的地方.我所要做的就是创建一个表单,验证它,并在服务层中使用一些业务逻辑.结果验证,业务逻辑和使用一种方法(例如:newProduct($ postData)).

在MVC中组织业务逻辑的正确方法是什么?也许我需要阅读一些书籍,或者看一些源代码示例.

php model-view-controller symfony1 zend-framework

3
推荐指数
2
解决办法
5560
查看次数

这种信号量的实现如何工作?

圣诞快乐!

我正在读"信号量小书".书中有一个C语言的实现,我并不完全理解.请参阅下面的代码.有这个唤醒变量.作者解释说:

唤醒计算未决信号的数量; 也就是说,已被唤醒但尚未恢复执行的线程数.唤醒的原因是为了确保我们的信号量具有第4.3节中描述的属性3

属性3:如果在线程执行信号时有线程在等待信号量,则必须唤醒其中一个等待线程.

好的,我想我理解了这个属性的含义.其中一个等待线程应该获取互斥锁而不是另一个(例如信令线程).如果我错了,请纠正我.我不明白的是这个机制如何保证这个属性.我说这家酒店不保证.非等待进程仍有可能获得互斥锁.我错过了什么?

typedef struct {
  int value, wakeups;
  Mutex *mutex;
  Cond *cond;
} Semaphore;

// SEMAPHORE

Semaphore *make_semaphore (int value)
{
  Semaphore *semaphore = check_malloc (sizeof(Semaphore));
  semaphore->value = value;
  semaphore->wakeups = 0;
  semaphore->mutex = make_mutex ();
  semaphore->cond = make_cond ();
  return semaphore;
}

void sem_wait (Semaphore *semaphore)
{
  mutex_lock (semaphore->mutex);
  semaphore->value--;

  if (semaphore->value < 0) {
    do {
      cond_wait (semaphore->cond, semaphore->mutex);
    } while (semaphore->wakeups < 1);
    semaphore->wakeups--;
  }
  mutex_unlock (semaphore->mutex);
} …
Run Code Online (Sandbox Code Playgroud)

c multithreading mutex semaphore conditional-statements

3
推荐指数
1
解决办法
8877
查看次数

编写单元测试:如何以编程方式获取带有测试文件的文件夹

我在visual studio 2010中编写单元测试.
为了测试一些功能,我添加了一个带有testfiles的文件夹.
我需要以编程方式获取此文件夹,而不需要字符串中的硬路径.

该文件夹包含在 <projectDirectory>/TestFiles

我试过用AppDomain.CurrentDomain.BaseDirectory.这只有在我用resharper运行我的单元测试时才有效.
结果是<projectDirectory>/bin/debug这样我可以很容易地去TestFiles.

如果我使用visual studio运行测试,BaseDirectory是:
<sameFolderAsSolutionFile>\TestResults\<username>_<pcname> <datatime>\Out

我已将解决方案文件移至另一个文件夹.所以我的项目与我的解决方案文件不在同一个文件夹中.
例:
<sameFolderAsSolutionFile> = C:\SolutionFiles
<projectDirectory> = C:\Projects\MyProject

有人能告诉我如何在不使用硬编码字符串的情况下获取测试文件的路径吗?

编辑
我还没有找到解决方案.
Visual Studio正在使用另一个构建文件夹进行测试.因此,通常构建到bin文件夹中的所有内容都将构建到另一个文件夹中以进行测试.

我的TEMP-SOLUTION
我在我的测试项目中添加了一个App.config文件.在此配置文件中,我添加了一个包含测试文件所需路径的设置:

<appSettings>
  <add key="TestFiles" value="C:\Projects\MyProject\TestFiles"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)

c# directory unit-testing mstest visual-studio

20
推荐指数
3
解决办法
3万
查看次数

将包含ASCII的字符串转换为Unicode

我从我的HTML页面获取一个字符串到我的Java HTTPServlet.根据我的要求,我得到显示中文字符的ASCII码:

"可以告诉我" (没有空格)

如何将此字符串转换为Unicode?

HTML代码:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Find information</title>
    <link rel="stylesheet" type="text/css" href="layout.css">
</head>
<body>

<form id="lookupform" name="lookupform" action="LookupServlet" method="post" accept-charset="UTF-8">
    <table id="lookuptable" align="center">
        <tr>
            <label>Question:</label>
            <td><textarea cols="30" rows="2" name="lookupstring" id="lookupstring"></textarea></td>
        </tr>
    </table>
    <input type="submit" name="Look up" id="lookup" value="Look up"/>
</form>
Run Code Online (Sandbox Code Playgroud)

Java代码:

request.setCharacterEncoding("UTF-8");
javax.servlet.http.HttpSession session = request.getSession();
LoginResult lr = (LoginResult) session.getAttribute("loginResult");
String[] question = request.getParameterValues("lookupstring");
Run Code Online (Sandbox Code Playgroud)

如果我打印问题[0],那么我得到这个值:"可以告诉我"

java unicode servlets utf-8

1
推荐指数
1
解决办法
1万
查看次数

java JNI error java.lang.UnsatisfiedLinkError:

java -Djava.library.path=. TestJNI
>>>>

Exception in thread "main" java.lang.UnsatisfiedLinkError: TestJNI.calibrate([D[DII)[D
 at TestJNI.calibrate(Native Method)
 at TestJNI.main(TestJNI.java:61)
Run Code Online (Sandbox Code Playgroud)

我知道库正在加载,否则错误说无法找到校准库.上述错误是什么意思?

编辑

这是我的实施 -

JNIEXPORT jdoubleArray JNICALL Java_TestJNI_cailbrate (JNIEnv * env, jobject jobj, jdoubleArray rtt, jdoubleArray distance ,jint activecount,jint passivecount) {
jdoubleArray jresult = (*env)->NewDoubleArray(env,3);
 .......
return jresult;
}
Run Code Online (Sandbox Code Playgroud)

参数声明是否正确?

java-native-interface

5
推荐指数
1
解决办法
1万
查看次数

设计模式替换嵌套循环

是否有任何设计模式或其他方法来替换大量的嵌套循环?唯一的目的是提高性能.

例如

for (int i=0; i<2000; i++)
{
    for (int j=0; j<2000; j++)
    {
       for (int k=0; k<2000; k++)
       {

       }
    }
}
Run Code Online (Sandbox Code Playgroud)

algorithm design-patterns

1
推荐指数
1
解决办法
1105
查看次数