一种可能性是创建一个private 版本的input 函数,它会隐藏内置函数。每次调用它时,它都会从一组预定的值中返回一个值。您可以使用global/persistent 变量(用于跟踪函数被调用次数的计数器)来维护状态。
基本上你会创建一个method stub 到mock 的真实函数的行为。
这是一个更好地解释我的想法的例子:
/somepath/private/input.m
function ret = input(prompt, varargin)
%# counter
persistent count
if isempty(count), count = 1; end
%# hard-coded values to return
values = {
1 2 'sin(x)' ...
1 3 'exp(x)' ...
2 3 2 ...
3 2 '--' ...
};
%# display the prompt message
disp([prompt '[SIMULATED INPUT #' num2str(count) ']'])
%# return value
ret = values{count};
%# increment counter
count = count + 1;
if count>12
count = 1;
end
end
/somepath/hw1.m
function hw1
%# image this is a sample homework file,
%# using the standard INPUT function to ask for input from the user
%# and do something useful with it :)
num1 = input('enter a number: ');
num2 = input('enter a second number: ');
str = input('enter a string: ', 's');
fprintf('You entered: %d %d %s\n',num1,num2,str);
num1 = input('enter a number: ');
num2 = input('enter a second number: ');
str = input('enter a string: ', 's');
fprintf('You entered: %d %d %s\n',num1,num2,str);
num1 = input('enter a number: ');
num2 = input('enter a second number: ');
num3 = input('enter a third number: ');
fprintf('You entered: %d %d %d\n',num1,num2,num3);
num1 = input('enter a number: ');
num2 = input('enter a second number: ');
str = input('enter a string: ', 's');
fprintf('You entered: %d %d %s\n',num1,num2,str);
end
这是你得到的输出:
enter a number: [SIMULATED INPUT #1]
enter a second number: [SIMULATED INPUT #2]
enter a string: [SIMULATED INPUT #3]
You entered: 1 2 sin(x)
enter a number: [SIMULATED INPUT #4]
enter a second number: [SIMULATED INPUT #5]
enter a string: [SIMULATED INPUT #6]
You entered: 1 3 exp(x)
enter a number: [SIMULATED INPUT #7]
enter a second number: [SIMULATED INPUT #8]
enter a third number: [SIMULATED INPUT #9]
You entered: 2 3 2
enter a number: [SIMULATED INPUT #10]
enter a second number: [SIMULATED INPUT #11]
enter a string: [SIMULATED INPUT #12]
You entered: 3 2 --