|
|
@ -2,44 +2,53 @@ import unittest
|
|
|
|
from unittest.mock import Mock, patch
|
|
|
|
from unittest.mock import Mock, patch
|
|
|
|
from snowboydecoder import HotwordDetector
|
|
|
|
from snowboydecoder import HotwordDetector
|
|
|
|
|
|
|
|
|
|
|
|
# 假设 RESOURCE_FILE 是在 snowboydecoder.py 中定义的
|
|
|
|
RESOURCE_FILE = 'C:/Users/Lenovo/Desktop/项目/daomangzhang/src/Guide_stick_system/voice_assistant/resources/common.res'
|
|
|
|
RESOURCE_FILE = 'path/to/resource.res'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestHotwordDetector(unittest.TestCase):
|
|
|
|
class TestHotwordDetector(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
|
|
@patch('snowboydecoder.snowboydetect.SnowboyDetect')
|
|
|
|
@patch('snowboydecoder.snowboydetect.SnowboyDetect')
|
|
|
|
@patch('snowboydecoder.pyaudio.PyAudio')
|
|
|
|
@patch('snowboydecoder.pyaudio.PyAudio')
|
|
|
|
def test_init(self, mock_pyaudio, mock_snowboydetect):
|
|
|
|
def test_init(self, mock_pyaudio, mock_snowboydetect):
|
|
|
|
# Mock SnowboyDetect
|
|
|
|
# 模拟SnowboyDetect对象
|
|
|
|
mock_detector = mock_snowboydetect.return_value
|
|
|
|
mock_detector = mock_snowboydetect.return_value
|
|
|
|
|
|
|
|
# 模拟NumChannels方法,返回1
|
|
|
|
mock_detector.NumChannels.return_value = 1
|
|
|
|
mock_detector.NumChannels.return_value = 1
|
|
|
|
|
|
|
|
# 模拟SampleRate方法,返回16000
|
|
|
|
mock_detector.SampleRate.return_value = 16000
|
|
|
|
mock_detector.SampleRate.return_value = 16000
|
|
|
|
|
|
|
|
# 模拟BitsPerSample方法,返回16
|
|
|
|
mock_detector.BitsPerSample.return_value = 16
|
|
|
|
mock_detector.BitsPerSample.return_value = 16
|
|
|
|
|
|
|
|
# 模拟NumHotwords方法,返回1
|
|
|
|
mock_detector.NumHotwords.return_value = 1
|
|
|
|
mock_detector.NumHotwords.return_value = 1
|
|
|
|
|
|
|
|
|
|
|
|
# Mock PyAudio
|
|
|
|
# 模拟PyAudio对象
|
|
|
|
mock_audio = mock_pyaudio.return_value
|
|
|
|
mock_audio = mock_pyaudio.return_value
|
|
|
|
|
|
|
|
|
|
|
|
# Mock audio stream
|
|
|
|
# 模拟音频流
|
|
|
|
mock_stream = Mock()
|
|
|
|
mock_stream = Mock()
|
|
|
|
mock_audio.open.return_value = mock_stream
|
|
|
|
mock_audio.open.return_value = mock_stream
|
|
|
|
|
|
|
|
|
|
|
|
# Initialize HotwordDetector
|
|
|
|
# 定义decoder_model
|
|
|
|
decoder_model = 'model_id'
|
|
|
|
decoder_model = 'model_id'
|
|
|
|
|
|
|
|
# 定义sensitivity
|
|
|
|
sensitivity = 0.5
|
|
|
|
sensitivity = 0.5
|
|
|
|
|
|
|
|
# 定义audio_gain
|
|
|
|
audio_gain = 1.0
|
|
|
|
audio_gain = 1.0
|
|
|
|
|
|
|
|
# 实例化HotwordDetector
|
|
|
|
detector = HotwordDetector(decoder_model, RESOURCE_FILE, sensitivity, audio_gain)
|
|
|
|
detector = HotwordDetector(decoder_model, RESOURCE_FILE, sensitivity, audio_gain)
|
|
|
|
|
|
|
|
|
|
|
|
# Verify interactions
|
|
|
|
# 检查SnowboyDetect是否被调用一次,参数正确
|
|
|
|
mock_snowboydetect.assert_called_once_with(
|
|
|
|
mock_snowboydetect.assert_called_once_with(
|
|
|
|
resource_filename=RESOURCE_FILE.encode(),
|
|
|
|
resource_filename=RESOURCE_FILE.encode(),
|
|
|
|
model_str='model_id'.encode()
|
|
|
|
model_str='model_id'.encode()
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
# 检查SetAudioGain是否被调用一次,参数正确
|
|
|
|
mock_detector.SetAudioGain.assert_called_once_with(audio_gain)
|
|
|
|
mock_detector.SetAudioGain.assert_called_once_with(audio_gain)
|
|
|
|
|
|
|
|
# 检查SetSensitivity是否被调用一次,参数正确
|
|
|
|
mock_detector.SetSensitivity.assert_called_once_with('0.5'.encode())
|
|
|
|
mock_detector.SetSensitivity.assert_called_once_with('0.5'.encode())
|
|
|
|
|
|
|
|
|
|
|
|
# Verify PyAudio and Stream configurations
|
|
|
|
# 检查PyAudio是否被调用一次
|
|
|
|
mock_pyaudio.assert_called_once()
|
|
|
|
mock_pyaudio.assert_called_once()
|
|
|
|
|
|
|
|
# 检查PyAudio的open方法是否被调用一次,参数正确
|
|
|
|
mock_audio.open.assert_called_once_with(
|
|
|
|
mock_audio.open.assert_called_once_with(
|
|
|
|
input=True, output=False,
|
|
|
|
input=True, output=False,
|
|
|
|
format=mock_audio.get_format_from_width(2).return_value,
|
|
|
|
format=mock_audio.get_format_from_width(2).return_value,
|
|
|
@ -49,7 +58,7 @@ class TestHotwordDetector(unittest.TestCase):
|
|
|
|
stream_callback=detector.audio_callback
|
|
|
|
stream_callback=detector.audio_callback
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# Verify RingBuffer size
|
|
|
|
# 检查ring_buffer的长度是否为0
|
|
|
|
self.assertEqual(len(detector.ring_buffer), 0)
|
|
|
|
self.assertEqual(len(detector.ring_buffer), 0)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
if __name__ == '__main__':
|
|
|
|