小编Geo*_*kov的帖子

如何在Angularjs Jasmine单元测试中模拟返回承诺的服务?

我有myService使用myOtherService,它进行远程调用,返回promise:

angular.module('app.myService', ['app.myOtherService'])
  .factory('myService', [
    myOtherService,
    function(myOtherService) {
      function makeRemoteCall() {
        return myOtherService.makeRemoteCallReturningPromise();
      }

      return {
        makeRemoteCall: makeRemoteCall
      };      
    }
  ])
Run Code Online (Sandbox Code Playgroud)

为了进行单元测试myService我需要模拟myOtherService,这样它的myService方法返回一个promise.我是这样做的:

describe('Testing remote call returning promise', function() {
  var myService;
  var myOtherServiceMock = {};

  beforeEach(module('app.myService'));

  // I have to inject mock when calling module(),
  // and module() should come before any inject()
  beforeEach(module(function ($provide) {
    $provide.value('myOtherService', myOtherServiceMock);
  }));

  // However, in order to properly construct my mock
  // I need $q, which can …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing mocking jasmine angularjs

149
推荐指数
4
解决办法
13万
查看次数

我应该将所有方法标记为虚拟吗

在Java中,您可以将方法标记为final,以使其无法覆盖.

在C#中,您必须将方法标记为虚拟,以便可以覆盖.

这是否意味着在C#中你应该将所有方法标记为虚拟(除了一些你不想被覆盖的方法),因为很可能你不知道你的类可以以什么方式被继承?

c# java methods virtual-functions

71
推荐指数
4
解决办法
7070
查看次数

不可变类vs结构

以下是类与C#中的结构不同的唯一方法(如果我错了请纠正我):

  • 类变量是引用,而struct变量是值,因此struct的整个值被复制到赋值和参数传递中
  • 类变量是存储在堆栈上的指针,指向堆上的内存,而struct变量作为值存储在堆上

假设我有一个不可变的结构,即包含初始化后无法修改的字段的结构.每次我将此结构作为参数传递或在赋值中使用时,该值都将被复制并存储在堆栈中.

然后假设我使这个不可变的结构成为一个不可变的类.此类的单个实例将创建一次,并且只有对类的引用将被复制到赋值和参数传递中.

如果对象是可变的,则这两种情况下的行为会有所不同:当一个人改变对象时,在第一种情况下,结构的副本将被修改,而在第二种情况下,原始对象将被改变.但是,在这两种情况下,对象都是不可变的,因此这个对象的用户实际上是类还是结构没有区别.

由于复制引用比复制struct便宜,为什么要使用不可变结构?

此外,由于可变结构是邪恶的,看起来根本没有理由使用结构.

我哪里错了?

c# struct class immutability

20
推荐指数
2
解决办法
2642
查看次数

C#immutable int

在Java中,字符串是不可变的.如果我们有一个字符串并对其进行更改,我们将获得由同一个变量引用的新字符串:

String str = "abc";
str += "def"; // now str refers to another piece in the heap containing "abcdef"
              // while "abc" is still somewhere in the heap until taken by GC
Run Code Online (Sandbox Code Playgroud)

据说 int和double在C#中是不可变的.这是否意味着当我们有int并稍后更改它时,我们会得到同一个变量"指向"的新int?同样的事情,但堆栈.

int i = 1;
i += 1; // same thing: in the stack there is value 2 to which variable
        // i is attached, and somewhere in the stack there is value 1
Run Code Online (Sandbox Code Playgroud)

那是对的吗?如果没有,int以什么方式不可变?

c# int immutability

15
推荐指数
2
解决办法
1591
查看次数

C 嵌套宏

为什么嵌套宏在一种情况下有效,而在另一种情况下则无效?

情况1:

#define name(val) #val
#define name2(front, back) name(front ## back)
...

printf("%s\n", name2(foo, bar));   // foobar
Run Code Online (Sandbox Code Playgroud)

案例2:

#define paste(front, back) front ## back
#define name(val) #val
#define name2(front, back) name(paste(front, back))
...


printf("%s\n", name2(foo, bar));   // paste(foo, bar)
Run Code Online (Sandbox Code Playgroud)

c c-preprocessor

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

对象目前在其他地方使用

我收到此错误,它看起来像是因为不同的线程正在访问相同的Bitmap对象.但是我随处可以使用锁.

public class MySingleInstanceClass
{
    private Object locker = new Object();

    private Bitmap myImage = new Bitmap(100, 100);

    public Bitmap MyImage
    {
        get
        {
            lock (locker)
                return myImage;
        }
        private set
        {
            lock (locker)
                myImage = value;
        }
    }

    private void Refresh()
    {
        lock (locker)
        {
            var g = Graphics.FromImage(myImage);
            // do more processing
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

MySingleInstanceClass只有一个实例.呼叫MyImage并且Refresh()可能来自不同的线程.据我所知,内部代码lock(locker)在另一个线程完成之前不会被执行,但我仍然得到错误.任何人都可以指出代码中的缺陷吗?

异常看起来像这样:

System.Drawing.dll中发生了'System.InvalidOperationException'类型的第一次机会异常

错误:对象当前正在其他地方使用.

在System.Drawing.Graphics.FromImage(图片图片)

at(指向包含var g = Graphics.FromImage(myImage)的行;)

c# locking

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

C#单身定义

我看到了这样的实现:

class MyClass
{
    private static readonly MyClass _instance = new MyClass();

    public static MyClass Instance{
        get{ return _instance; }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么不简单?

class MyClass
{
    public static readonly MyClass Instance = new MyClass();
}
Run Code Online (Sandbox Code Playgroud)

c# singleton

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

C#属性可以让程序运行得更慢吗?

我担心人们总是使用getter-setter模式:

    public int MyVariable { get; private set; }

    public void SomeFunction(){
        MyVariable = 10;
    }
Run Code Online (Sandbox Code Playgroud)

据我所知,编译为:

    private int myVariable;

    public int GetMyVariable(){
        return myVariable;
    }

    private void SetMyVariable(int value){
        myVariable = value;
    }

    public void SomeFunction()
    {
        SetMyVariable(10);
    }
Run Code Online (Sandbox Code Playgroud)

如果频繁使用,它不会影响程序的性能吗?这样做是不是更好:

    private int myVariable;
    public int MyVariable { get {return myVariable; } }

    public void SomeFunction(){
        myVariable = 10;
    }
Run Code Online (Sandbox Code Playgroud)

c# getter setter properties

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

为什么在刷新Flash中的屏幕之前会出现EnterFrame

假设我们在Flash中有1 fps的动画,其中每个帧都有一个运行100 ms的脚本.据我所知,Flash中的动画工作原理如下:

0ms: Begin executing Frame 1's frame script
100ms: Finish executing Frame 1's frame script
1000ms: Begin rendering Frame 1's content and frame-script output
1050ms: Finish rendering Frame 1's content and frame-script output

1051ms: Begin executing Frame 2's frame script
1151ms: Finish executing Frame 2's frame script
2000ms: Begin rendering Frame 2's content and frame-script output
2050ms: Finish rendering Frame 2's content and frame-script output

2051ms: Begin executing Frame 3's frame script
2151ms: Finish executing Frame 3's frame …
Run Code Online (Sandbox Code Playgroud)

flash actionscript-3 enterframeevent

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