using System;
using System.IO;
using System.Text;
namespace ResourceTest
{
class Program
{
static void Main(string[] args)
{
//Create a memory stream to read the file into..
MemoryStream outStream = new MemoryStream();
//Copy our _out.wav File
SomeResource._out.CopyTo(outStream);
//Also possible:
//SomeResource.ResourceManager.GetStream("out.wav")...
//Read into a byte array.
byte[] file_bytes = outStream.ToArray();
//Close it
outStream.Close();
//Do something with file_bytes..
}
}
}
java.util
与Mockito合作吗?
在代码执行期间,遇到类似这样的事情:
Optional.ofNullable
我将我的模拟行为设置如下:
User user = Optional.ofNullable(userProviderMock.findUser()).orElse(someMethod())
当我运行它时,when(userProviderMock.findUser()).thenReturn(new User());
返回userProviderMock
(调试确认),但不知怎的new User()
仍在执行。
我真的不知道为什么会这样。有线索吗?
答案 0 :(得分:5)
Mockito和ofNullable
在这里并不是真正的问题。请考虑以下代码:
Optional.of("foo").orElse(someMethod())
以上代码将评估为Optional.of("foo")
- 但仍然调用 orElse
,因此仍需要调用someMethod()
才能通过其返回 - value作为orElse
的参数,即使该参数最终没有被使用。
如果这对您有用 - 如果您不希望调用someMethod()
,除非实际需要返回值 - 那么您应该使用orElseGet
代替:
Optional.of("foo").orElseGet(() -> someMethod())
或者更确切地说:
User user = Optional.ofNullable(userProviderMock.findUser()).orElseGet(() -> someMethod())
编辑添加: Didier L指出() -> someMethod()
也可以写为this::someMethod
(即:我们可以将其编写为方法参考而非而不是一个lambda),它可能更具可读性。
无论哪种方式,它都会被隐式转换为大约这样:
User user = Optional.ofNullable(userProviderMock.findUser()).orElseGet(new Supplier<User>() {
public User get() {
return someMethod();
}
});